0

我在 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>

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

感谢帮助 :)

4

2 回答 2

0

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

于 2012-06-13T14:09:00.147 回答
0

您不能使用Mode=SelfAncestorLevel属性。只需使用Mode=Self.

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

于 2012-06-14T08:03:35.913 回答