繁体   English   中英

WPF按钮样式模板已启用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM