调整XAML中控件的当前样式

本文关键字:样式 控件 XAML 调整 | 更新日期: 2023-09-27 18:19:55

假设我们有一个ListView。在我们的Resources中,有一个Style用于ListView,它正在自动应用。Style设置ItemContainerStyle:

<Window.Resources>
    <Style TargetType="{x:Type ListView}">
        <Setter Property="ItemContainerStyle">
            ...
        </Setter>
    </Style>
</Window.Resources>
...
<ListView x:Name="SpecialListView">
    ...
</ListView>

现在我想更改SpecialListViewItemContainerStyle。但是,我不想完全替换它。相反,我只想设置一个属性(比如Background)。

我唯一能想到的解决方案是在Resources中命名用于ItemContainerStyleStyle,并在此基础上创建一个新的。不过我不想这么做。我们可能不知道应用了哪个Style,或者可能无法设置子Style的名称。

有可能吗?

调整XAML中控件的当前样式

如果您能区分具体情况,您可以使用转换器。

在特定属性的泛型样式中,绑定到特定转换器。转换器的默认逻辑返回通用样式值,在特定情况下返回其他值。

好吧,这可能有点简化。但显示了的主要想法

<Window.Resources>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Foreground" Value="Green"></Setter>
            <Setter Property="Background" Value="Red"></Setter>
        </Style>
    </Window.Resources>
    <StackPanel>
        <TextBox>
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
                    <Setter Property="Background" Value="Yellow"></Setter>
                </Style>
            </TextBox.Style>
            Tb1
        </TextBox>
        <TextBox>Tb2</TextBox>
        <TextBox>Tb3</TextBox>
    </StackPanel>