|
xmlns:converter="clr-namespace:App1.Helper"
x:Class="App1.Views.CustomControl">
<ContentView.Resources>
<ResourceDictionary>
<converter:AnimateImage x:Key="AnimateImage"/>
</ResourceDictionary>
</ContentView.Resources>
<Frame HasShadow="True"
Padding="0"
BorderColor="Gray">
<Grid HorizontalOptions="FillAndExpand" Margin="16">
<Label HorizontalOptions="Start" VerticalOptions="Center"
Text="{Binding Name}" />
<Image x:Name="image"
IsEnabled="{Binding IsSelected, Converter={StaticResource AnimateImage}, ConverterParameter={x:Reference image}}"
Source="iCheck.png"
HorizontalOptions="End"
VerticalOptions="Center"
WidthRequest="25"
HeightRequest="25" >
</Image>
</Grid>
</Frame>
</ContentView> |
|
public class AnimateImage : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var element = parameter as Image;
if ((bool)value)
{
element.Opacity = 0;
element.FadeTo(1, 2000, Easing.SinIn);
return true;
}
else
{
element.FadeTo(0, 2000, Easing.SinOut);
return false;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
} |
|
x:Class="App1.Views.CustomControl">
<Frame HasShadow="True"
Padding="0"
BorderColor="Gray">
<Grid HorizontalOptions="FillAndExpand" Margin="16">
<Grid.GestureRecognizers>
<TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped"/>
</Grid.GestureRecognizers>
<Label HorizontalOptions="Start" VerticalOptions="Center"
Text="{Binding Name}" />
<Image x:Name="image"
Source="iCheck.png"
IsVisible="{Binding IsSelected}"
HorizontalOptions="End"
VerticalOptions="Center"
WidthRequest="25"
HeightRequest="25" >
</Image>
</Grid>
</Frame>
</ContentView> |
|
private async void TapGestureRecognizer_Tapped(object sender, EventArgs e)
{
if (!Item.IsSelected)
{
image.Opacity = 0;
image.FadeTo(1, 2000, Easing.SinIn);
Item.IsSelected = true;
}
else
{
await image.FadeTo(0, 2000, Easing.SinInOut);
Item.IsSelected = false;
}
} |