【问题标题】:Change application wide style in XAML在 XAML 中更改应用程序范围的样式
【发布时间】:2017-11-23 13:40:16
【问题描述】:

我的整个应用程序的按钮样式如下所示:

<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
some style code here
</Style>

它确实会影响每个这样使用的按钮:

<Button />

但是当我想像这样改变一个特定的按钮时:

<Button>
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Visibility" Value="Visible"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding SomeBoolean}" Value="false">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

它是 windows 标准样式。

【问题讨论】:

  • 这是正常的,因为您正在覆盖全局按钮样式。您可以做的是创建一个附加样式,将您愿意应用的两种样式结合起来,或者将您的全局样式放入本地按钮样式中
  • 我不能创建一个全局样式,我可以像使用标准 windows 样式那样使用触发器来更改它吗?为每个需要触发的按钮创建新样式似乎是错误的。
  • 当然可以。为您的第一个样式指定一个资源名称,然后使用与您的第一个样式相同的语法,方法是将 basedOnnyour trigger 需要的样式基于您的第一个样式的资源名称,在您的控件上使用 Style="{StaticResource trigger_style_name}"
  • 我以前也有过,但后来我必须将这种样式分配给整个应用程序中使用的每个按钮。我想避免这种情况。
  • 对不起,我猜你必须这样做。您必须创建一个“appButton”,它将继承 Windows 按钮并应用您的应用程序样式。然后在您的整个应用程序中,用 xaml 文件中的 button_inherited_class_name 替换按钮控件。这就是为什么在启动 WPF 应用程序时,良好的做法是继承自定义控件类中的每个控件。我没有看到其他方式

标签: wpf xaml button app.xaml


【解决方案1】:

您缺少BasedOn 属性:

<Button>
    <Button.Style>
        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
            <Setter Property="Visibility" Value="Visible"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding SomeBoolean}" Value="false">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

【讨论】:

    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2012-03-04
    相关资源
    最近更新 更多