[英]Style WPF radio button as toggle button with correct IsEnabled behaviour
[英]WPF Button Style Template IsEnabled
我基于这个例子
我需要自己的按钮样式(没有鼠标悬停动画等),所以我在app.xaml中做到了:
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Border"
CornerRadius="2" BorderThickness="1"
Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" />
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" />
<Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我的按钮: <Button IsEnabled="true"/>
现在,如果我将按钮更改为<Button IsEnabled="false"/>
我的应用程序一开始会崩溃,并显示以下错误:“ {DependencyProperty.UnsetValue}”不是属性“ BorderBrush”的有效值。
我究竟做错了什么?
它与您的静态参考有关。
特别地,XAML解析在顺序上非常棘手-您必须确保在解析器以上述样式到达该行之前,先引用具有x:Key="DisabledForegroundBrush"
的笔刷-即使您的上述样式相同文件为DisabledForegroundBrush
。
如果您还没有为DisabledForegroundBrush
设置的画笔,则可以在不需要的情况下删除上面代码中引用它的行,或者,如果需要,可以按如下所示创建一个:
<SolidColorBrush x:Key="DisabledForegroundBrush" Color="Red" />
您可以在适当的地方选择颜色。 或者,您可以在这里选择其他种类的画笔: http : //msdn.microsoft.com/zh-cn/library/aa970904(v=vs.110).aspx
如果您已经想要使用画笔,那么如果您可以提供更多有关画笔在代码库中的位置(例如,它在资源字典中)以及DisabledForegroundBrush
画笔在何处的更多信息,可能会帮助我确定一个实际的解决方案/确保已引用画笔的最佳方法。
注意:如果您不能确保首先解析DisabledForegroundBrush
则可以选择将StaticResource
更改为DynamicResource
,但是不建议这样做,除非该资源的链接可能在运行时实际发生更改(请参见静态文件中的StaticResource和DynamicResource有什么区别)。 WPF? )
如果您只想对样式进行硬编码,而不是从外部引用前景笔刷,则可以更改以下行:
<Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
至:
<Setter Property="Foreground" Value="[SOME COLOR]"/>
为了摆脱为字体创建单独的画笔对象的需要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.