我正尝试通过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>
答案 0 :(得分:1)
TextBox
样式不会扩展FrameworkElement
样式,除非您明确地将前者基于后者:
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type FrameworkElement}}">
...
</Style>