CustomControl
은 ControlTemplate
으로 둘러싸여 있습니다. CustomControl
에는 TextBox
의 경우 , TextBox
및 Validation.ErrorTemplate
의 다른 CustomControl
이 포함되어 있습니다.WPT에서 Validation.ErrorTemplate 내부에서 DataTrigger 바인딩하는 방법
내가하려는 것은 CustomControl
을 가리거나 TextBox
에 집중하면 Validation.ErrorTemplate
이 나타납니다.
현재 주위에 Border
을 입력 한 경우에만을 팝업합니다. 솔직하게 말해서 StackPanel
또는 AdornedElementPlaceholder
의 Border
인지 확실하지 않습니다. 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>
그래서 Validation.ErrorTemplate
내부 DataTrigger
가 ElementName=outerBorder
에 바인딩해야합니다.
나는 문제가 나는 내부 ControlTemplate
(Validation.ErrorTemplate
)에 ControlTemplate
그래서 DataTrigger
Binding
ControlTemplate
돌며을 가지고있다 외부의 Properties
에 대한 지식이없는 것 같아요.
woow 덕분에, 마치 마법처럼 일했다. .. 당신은'AdornedElement (TextBox.Tag)'조금 설명해 주시겠습니까? TextBox.IsFocused에 대해서도'DataTrigger'를 원할 때. 두 개의 'Tag'속성을 설정하거나 그 모양을 어떻게 설정할 수 있습니까? – SteveOhio
하나의 태그 속성 만 있지만 TextBox의 속성에 바인딩 할 수 있습니다 (예 : 'AdornedElement. (TextBox.IsFocused)' – mm8
그냥 시도 .. 잘 작동합니다! 감사합니다 – SteveOhio