Я создал пользовательский пользовательский элемент управления пользователем. Он должен работать на сенсорном экране, поэтому я должен использовать анимацию вместо заданного свойства на триггере IsClicked. Он отлично работает, но мне также нужно сделать серый градиент рамки, когда свойство UserControl IsEnabled установлено на false.Фон с отключенным управлением в wpf
Это мой код:
<UserControl x:Class="TicketApplication.Controls.RectangleButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Name="button"
Width="255"
Height="85"
mc:Ignorable="d">
<Grid x:Name="grid"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<Border x:Name="border"
Width="Auto"
Height="Auto"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
CornerRadius="20">
<Border.Background>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Offset="0.138" Color="{Binding Path=BackgroundGradientTopColor}" />
<GradientStop Offset="0.982" Color="{Binding Path=BackgroundGradientBottomColor}" />
</LinearGradientBrush>
</Border.Background>
<TextBlock x:Name="text"
Width="Auto"
Height="Auto"
Margin="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
FontFamily="Open Sans"
FontSize="{Binding Path=TextSize,
FallbackValue=40}"
FontWeight="Bold"
Foreground="White"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
Text="{Binding Path=Text,
FallbackValue='Test'}"
TextAlignment="Center"
TextWrapping="Wrap" />
<Border.Style>
<Style TargetType="{x:Type Border}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsEnabled}" Value="false">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Offset="0.138" Color="#3d4144" />
<GradientStop Offset="0.982" Color="#3d4144" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<Grid.Triggers>
<EventTrigger RoutedEvent="Grid.MouseDown">
<BeginStoryboard>
<Storyboard Completed="Storyboard_Completed">
<ColorAnimationUsingKeyFrames Storyboard.TargetName="border" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0:0:0:0.0" Value="#3d4144" />
<EasingColorKeyFrame KeyTime="0:0:0:0.15" Value="{Binding Path=BackgroundGradientTopColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="border" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0:0:0:0.0" Value="#3d4144" />
<EasingColorKeyFrame KeyTime="0:0:0:0.15" Value="{Binding Path=BackgroundGradientBottomColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
</Grid>
Как вы можете видеть, что я сделал триггер для IsEnabled собственности, но она не работает.
Отлично, он работает, спасибо! Вы знаете, как реализовать свойство IsCheckable в таком контроле? Я не знаю, как я могу опустить блок EventTrigger> из-за пропуска анимации, предполагая, что у меня есть свойство IsCheckable в коде позади? –
Lukas