106 lines
3.1 KiB
C#
106 lines
3.1 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using Xamarin.Forms;
|
|||
|
|
|||
|
namespace Aurora.Design.Components.ImageButton
|
|||
|
{
|
|||
|
public partial class ImageButton : ContentView
|
|||
|
{
|
|||
|
public ImageButton()
|
|||
|
{
|
|||
|
InitializeComponent();
|
|||
|
}
|
|||
|
|
|||
|
public static readonly BindableProperty SourceProperty =
|
|||
|
BindableProperty.Create(
|
|||
|
"Source",
|
|||
|
typeof(ImageSource),
|
|||
|
typeof(ImageButton),
|
|||
|
null,
|
|||
|
BindingMode.TwoWay,
|
|||
|
propertyChanged: (bindable, oldValue, newValue) =>
|
|||
|
{
|
|||
|
ImageButton control = (ImageButton)bindable;
|
|||
|
|
|||
|
control.imgButton.Source = (ImageSource)newValue;
|
|||
|
});
|
|||
|
|
|||
|
public static readonly BindableProperty CommandProperty = BindableProperty.Create(
|
|||
|
"Command",
|
|||
|
typeof(Command),
|
|||
|
typeof(ImageButton),
|
|||
|
null,
|
|||
|
propertyChanged: (bindable, oldValue, newValue) =>
|
|||
|
{
|
|||
|
ImageButton control = (ImageButton)bindable;
|
|||
|
var command = (Command)newValue;
|
|||
|
|
|||
|
CanExecute(command, control);
|
|||
|
|
|||
|
command.CanExecuteChanged += (sender, e) =>
|
|||
|
{
|
|||
|
CanExecute(sender, control);
|
|||
|
};
|
|||
|
});
|
|||
|
|
|||
|
public static readonly BindableProperty CommandParameterProperty = BindableProperty.Create(
|
|||
|
"CommandParameter",
|
|||
|
typeof(object),
|
|||
|
typeof(ImageButton),
|
|||
|
null);
|
|||
|
|
|||
|
private static void CanExecute(object sender, ImageButton control)
|
|||
|
{
|
|||
|
var cmd = (Command)sender;
|
|||
|
control.imgButton.IsEnabled = cmd.CanExecute(null);
|
|||
|
}
|
|||
|
|
|||
|
public ImageSource Source
|
|||
|
{
|
|||
|
get { return (ImageSource)GetValue(SourceProperty); }
|
|||
|
set { SetValue(SourceProperty, value); }
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public event EventHandler<EventArgs> Tapped;
|
|||
|
|
|||
|
public Command Command
|
|||
|
{
|
|||
|
get { return (Command)GetValue(CommandProperty); }
|
|||
|
set { SetValue(CommandProperty, value); }
|
|||
|
}
|
|||
|
|
|||
|
public object CommandParameter
|
|||
|
{
|
|||
|
get { return GetValue(CommandParameterProperty); }
|
|||
|
set { SetValue(CommandParameterProperty, value); }
|
|||
|
}
|
|||
|
|
|||
|
protected void OnButtonTapped(object sender, EventArgs args)
|
|||
|
{
|
|||
|
object resolvedParameter;
|
|||
|
|
|||
|
if (CommandParameter != null)
|
|||
|
{
|
|||
|
resolvedParameter = CommandParameter;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
resolvedParameter = args;
|
|||
|
}
|
|||
|
|
|||
|
if (Command?.CanExecute(resolvedParameter) ?? true)
|
|||
|
{
|
|||
|
this.AbortAnimation("imgButtonAnim");
|
|||
|
new Animation(v => imgButton.Scale = v, 1, 0.5).Commit(imgButton, "imgButtonAnim", 16, 150, Easing.SinOut,
|
|||
|
(v, c) =>
|
|||
|
{
|
|||
|
imgButton.Scale = 1;
|
|||
|
Tapped?.Invoke(this, args);
|
|||
|
Command?.Execute(resolvedParameter);
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|