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);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|