add account

This commit is contained in:
2022-02-26 12:36:32 +08:00
parent fae6d2ce50
commit 4d69bea70b
12 changed files with 192 additions and 23 deletions

View File

@ -1,4 +1,5 @@
using Billing.Languages;
using Billing.Models;
using System;
using System.Globalization;
using Xamarin.Forms;
@ -24,17 +25,36 @@ namespace Billing.UI
public class MoneyConverter : IValueConverter
{
public bool MarkVisible { get; set; } = true;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is decimal d)
{
return "¥ " + d.ToString("n2", CultureInfo.InvariantCulture);
var number = d.ToString("n2");
if (MarkVisible)
{
return "¥ " + number;
}
return number;
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string s)
{
if (s.StartsWith("¥ "))
{
s = s[2..];
}
if (decimal.TryParse(s, out decimal d))
{
return d;
}
return 0m;
}
return value;
}
}
@ -51,4 +71,28 @@ namespace Billing.UI
return value;
}
}
public class AccountCategoryConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is AccountCategory category)
{
return category switch
{
AccountCategory.Cash => Resource.Cash,
AccountCategory.CreditCard => Resource.CreditCard,
AccountCategory.DebitCard => Resource.DebitCard,
AccountCategory.ElecAccount => Resource.ElecAccount,
_ => category.ToString()
};
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
}

View File

@ -19,6 +19,24 @@ namespace Billing.UI
return obj;
}
public static View HorizontalOptions(this View view, LayoutOptions options)
{
if (view != null)
{
view.HorizontalOptions = options;
}
return view;
}
public static View VerticalOptions(this View view, LayoutOptions options)
{
if (view != null)
{
view.VerticalOptions = options;
}
return view;
}
public static View DynamicResource(this View view, BindableProperty property, string key)
{
view.SetDynamicResource(property, key);

View File

@ -186,6 +186,49 @@ namespace Billing.UI
};
}
public class OptionImageCell : OptionSelectCell
{
public static readonly BindableProperty ImageSourceProperty = BindableProperty.Create(nameof(ImageSource), typeof(ImageSource), typeof(OptionImageCell));
[TypeConverter(typeof(ImageSourceConverter))]
public ImageSource ImageSource
{
get => (ImageSource)GetValue(ImageSourceProperty);
set => SetValue(ImageSourceProperty, value);
}
protected override View Content => new StackLayout
{
Orientation = StackOrientation.Horizontal,
HorizontalOptions = LayoutOptions.End,
Children =
{
new Image
{
HeightRequest = 20,
HorizontalOptions = LayoutOptions.End,
VerticalOptions = LayoutOptions.Center,
Margin = new Thickness(6, 0)
}
.Binding(Image.SourceProperty, nameof(ImageSource)),
new TintImage
{
HeightRequest = 20,
VerticalOptions = LayoutOptions.Center,
Margin = new Thickness(6, 0),
Source = "right.png"
}
},
GestureRecognizers =
{
new TapGestureRecognizer()
.Binding(TapGestureRecognizer.CommandProperty, nameof(Command))
.Binding(TapGestureRecognizer.CommandParameterProperty, nameof(CommandParameter))
}
};
}
public class OptionSwitchCell : OptionCell
{
public static readonly BindableProperty IsToggledProperty = BindableProperty.Create(nameof(IsToggled), typeof(bool), typeof(OptionSwitchCell));