为什么我的风格不被拿起?

时间:2017-06-14 13:54:59

标签: c# wpf xaml

我正尝试通过FrameworkElement中定义的Style将样式应用于所有ResourceDictionary个对象。在一个特定的视图中,我已经包含了资源字典,并且在其上有一个TextBox我想要使用该样式。

所以,以下是我玩过的两个定义:

    <!-- STYLE USED BY ALL FRAMEWORK ELEMENTS TO DISPLAY TOOLTIP ON VALIDATION ERROR -->
    <Style TargetType="{x:Type FrameworkElement}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError"
                     Value="True">
                <Setter Property="ToolTip"
                        Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}" />
            </Trigger>
        </Style.Triggers>
    </Style>

    <!-- STYLE USED BY ALL TEXTBOX CONTROLS FOR VALIDATION ERROR DISPLAY -->
    <Style TargetType="{x:Type TextBox}">
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <DockPanel LastChildFill="True">
                        <Image DockPanel.Dock="Right"
                               Source="{StaticResource imgDisallow16}" Width="16"/>
                        <Border BorderBrush="Red"
                                BorderThickness="1">
                            <AdornedElementPlaceholder />
                        </Border>
                    </DockPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

正如所写的那样,Tooltip的样式没有开始。如果我给那个样式x:Key并直接在TextBox引用该名称,它就可以了。但为什么FrameworkElement类型没有呢?由于TextBox继承了它,即。{/ p>

同样,如果我将Tooltip触发器添加到第二种样式,那就可行。那个没有名字,但是目标是TextBox。那么为什么没有名字就可以工作,但第一个不是?

编辑:这是`TextBox

<TextBox Grid.Row="0"
     Grid.Column="2">
    <TextBox.Text>
    <Binding Path="CurrentEquipment.Name"
         Mode="TwoWay"
         ValidatesOnNotifyDataErrors="True"
         NotifyOnValidationError="True"
         UpdateSourceTrigger="PropertyChanged">
        <Binding.ValidationRules>
            <vr:EmailValidationRule />
        </Binding.ValidationRules>
    </Binding>
    </TextBox.Text>
</TextBox>

1 个答案:

答案 0 :(得分:1)

TextBox样式不会扩展FrameworkElement样式,除非您明确地将前者基于后者:

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type FrameworkElement}}">
    ...
</Style>