WPF样式绑定到基本样式

时间:2012-06-13 13:12:26

标签: wpf inheritance binding styles

我在wpf中有基本风格和风格。

基本风格是:

<Style x:Key="BaseTextBox" TargetType="{x:Type TextBox}">
    <Setter Property="Background" Value="#DDFFDD" />
    <Setter Property="MinWidth" Value="75" />
    <Setter Property="behaviors:OCCInteraction.Triggers" Value="{StaticResource ResourceKey=validationTrigger}" />
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="Background" Value="#FFDDDD"/>
            <Setter Property="ToolTip" Value="{Binding Path=(Validation.Errors)[0].ErrorContent, RelativeSource={x:Static RelativeSource.Self}}" />
        </Trigger>
    </Style.Triggers>
</Style>

具体风格是:

<Style x:Key="EditableTextBox" TargetType="{x:Type TextBox}" BasedOn="{StaticResource ResourceKey=BaseTextBox}">
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <StackPanel Orientation="Horizontal">
                    <Border BorderBrush="Red" BorderThickness="1" Padding="0" Margin="0">
                        <AdornedElementPlaceholder Margin="0"/>
                    </Border>
                    <TextBlock Text="test" />
                    <Image Style="{StaticResource ResourceKey=WarningImage}"/>
                    <TextBlock Text="{Binding Path=(Validation.Errors)[0].ErrorContent, RelativeSource={RelativeSource Mode=Self,AncestorLevel=2}}" />

                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

现在我想将验证错误文本添加到图像旁边的文本块。但是相同的绑定路径不起作用。我尝试了不同的绑定,但我无法弄清楚如何在基本样式上访问相同的绑定。

感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

你没有AncestorLevel就试过了吗?你应该是同一个对象。

答案 1 :(得分:0)

您无法使用Mode=SelfAncestorLevel属性。只需使用Mode=Self

当您尝试在可视树中访问该控件的父级时,将使用祖先级别。