我有CustomControl
被ControlTemplate
包围。 CustomControl
包含另一个CustomControl
Label
,TextBox
和Validation.ErrorTemplate
TextBox
。
我要做的是,当我将CustomControl
悬停或焦点TextBox
时,应弹出Validation.ErrorTemplate
。
现在它只会弹出Validation.ErrorTemplate
当且仅当我将Border
悬停在TextBox
周围时。说实话,我不确定它是Border
还是StackPanel
中的AdornedElementPlaceholder
。我真的不知道如何将DataTrigger
内的Validation.ErrorTemplate
绑定到外Border
IsMouseOver
属性或IsFocused
来自TextBox
属性。
到目前为止我的代码下面:
<ControlTemplate TargetType="{x:Type my:CustomControl}" x:Key="CustomTemplate">
<Border BorderBrush="Green" BorderThickness="1" x:Name="outerBorder">
<my:LabelControl Label="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ViewModel.Label}">
<TextBox HorizontalAlignment="Stretch" Padding="3 0 3 0" Foreground="{DynamicResource Control.Foreground}">
<TextBox.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="3"/>
</Style>
</TextBox.Resources>
<TextBox.Text>
<Binding Path="ViewModel.Value" UpdateSourceTrigger="PropertyChanged" RelativeSource="{RelativeSource TemplatedParent}" ValidatesOnDataErrors="True"/>
</TextBox.Text>
<TextBox.Style>
<Triggers>
...
</Triggers>
</TextBox.Style>
<Validation.ErrorTemplate>
<ControlTemplate>
<StackPanel x:Name="BorderBorder">
<Border BorderThickness="1" BorderBrush="Red" CornerRadius="3" HorizontalAlignment="Left" >
<AdornedElementPlaceholder x:Name="textBox"/>
</Border>
<Border Background="LightGoldenrodYellow" CornerRadius="3">
<TextBlock Text="{Binding [0].ErrorContent}"/>
<Border.Style>
<Style>
<Setter Property="Border.Visibility" Value="Collapsed"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=BorderBorder, Path=IsMouseOver}" Value="true">
<Setter Property="Border.Visibility" Value="Visible"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</StackPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>
</my:LabelControl>
</Border>
</ControlTemplate>
因此DataTrigger
内的Validation.ErrorTemplate
应绑定到ElementName=outerBorder
,如果可能的话。{/ p>
我想问题是我在ControlTemplate
内有一个ControlTemplate
,因此内部DataTrigger
Binding
ControlTemplate
Validation.ErrorTemplate
Properties
)不了解外部的padding='SAME'
。
答案 0 :(得分:1)
您可以将Tag
的{{1}}属性绑定到控件本身的TextBox
属性,然后将IsMouseOver
绑定到DataTrigger
属性装饰元素:
Tag