1

假设我们有一个ListView. 在我们的某个地方,Resources有一个StyleforListView正在自动应用。这Style设置了ItemContainerStyle

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

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

我能想出的唯一解决方案是命名Style用于ItemContainerStyleinResources并基于它创建一个新的。不过,我不想那样做。我们可能不知道Style应用了哪个,或者可能无法为 sub- 设置名称Style

可能吗?

4

2 回答 2

0

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

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

于 2015-11-01T05:29:30.877 回答
-1

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

<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>
于 2015-10-29T13:32:29.993 回答