通用样式targettype

时间:2013-06-29 20:18:29

标签: c# .net wpf xaml

我有一种共同的风格,在多种控件之间共享(TextBox和Xceed的LongUpDown / DoubleUpDown)。

样式是否已命名(或键入?),我不希望它自动应用于目标类型的所有控件。

我不知道哪个是所有这些控件最接近的基类型,所以我想我可以尝试将TargetType设置为UIElement,但VS似乎无法识别它。

如何将TargetType设置为UIElement?

风格:

<Style TargetType="TextBox" x:Key="TextFieldEntry">
    <Setter Property="Background" Value="AliceBlue" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsDirty}" Value="True">
            <Setter Property="BorderBrush">
                <Setter.Value>
                    <SolidColorBrush Color="#FFF9D74B" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=IsDirty}" Value="False">
            <Setter Property="BorderBrush">
                <Setter.Value>
                    <SolidColorBrush Color="#FF98F329" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

控制:

 Style="{StaticResource ResourceKey=TextFieldEntry}"

1 个答案:

答案 0 :(得分:1)

您可以将TargetType设置为UIElement,但它不会起作用,因为您的样式中使用的BorderBrushBackground属性都在{ {3}}而不是UIElement

因此,您只需将TargetType设置为Control即可使其正常工作:

<Style TargetType="Control" x:Key="TextFieldEntry">
    <Setter Property="Background" Value="AliceBlue" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsDirty}" Value="True">
            <Setter Property="BorderBrush">
                <Setter.Value>
                    <SolidColorBrush Color="#FFF9D74B" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=IsDirty}" Value="False">
            <Setter Property="BorderBrush">
                <Setter.Value>
                    <SolidColorBrush Color="#FF98F329" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>