[英]Background of disabled control in wpf
I've created custom button user control. 我创建了自定义按钮用户控件。 It must works on touch screen so I must use Animations instead of set property on IsClicked trigger.
它必须在触摸屏上工作,因此我必须使用动画而不是IsClicked触发器上的set属性。 It works fine, but I also have to make gray background gradient of border when UserControl IsEnabled property is setted to false.
它工作正常,但是当UserControl IsEnabled属性设置为false时,我还必须使边框的灰色背景渐变。
That is my code: 那是我的代码:
<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>
As you can see I made trigger for IsEnabled property, but it doesn't work. 如您所见,我为IsEnabled属性创建了触发器,但是它不起作用。
LocalValue take higher precedence than the value coming from triggers. LocalValue的优先级高于触发器的值。 For more information, please visit this link .
有关更多信息,请访问此链接 。 To solve your problem, instead of setting the default background directly, set it through Style setter.
要解决您的问题,而不是直接设置默认背景,而是通过样式设置器进行设置。 Following is the modified style of Border.
以下是修改后的边框样式。
<Style TargetType="{x:Type Border}">
<Setter Property="Background">
<Setter.Value>
<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>
</Setter.Value>
</Setter>
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.