如何通过验证 child 来更改 parent?
How to change a parent by validating a child?
我有一个 DockPanel,它由一个按钮和一个文本框组成。这些控件由边框包围。现在我想验证文本框并在验证失败时更改边框的颜色。
但是,在我当前的应用程序中,验证只影响文本框本身。
<Border>
<DockPanel>
<Button Command="{Binding GetFolder}">
<Button.Template>
<ControlTemplate>
<Image Source="/Assets/Icons/Folder.png"/>
</ControlTemplate>
</Button.Template>
</Button>
<TextBox
Text="{Binding
Path=DataFolder,
ValidatesOnDataErrors=True,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
NotifyOnSourceUpdated=True}">
</TextBox>
</DockPanel>
</Border>
我知道我可以给 Border 一个 ErrorTemplate:
<Border Validation.ErrorTemplate="{StaticResource errorTemplate}">...,
但是我如何告诉它文本框的验证结果?
您可以使用 Style
和 DataTrigger
绑定到 TextBox
的附加 Validation.HasError
属性:
<Border>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding (Validation.HasError),ElementName=tb}"
Value="True">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<DockPanel>
<Button Command="{Binding GetFolder}">
<Button.Template>
<ControlTemplate>
<Image Source="/Assets/Icons/Folder.png"/>
</ControlTemplate>
</Button.Template>
</Button>
<TextBox x:Name="tb"
Text="{Binding
Path=DataFolder,
ValidatesOnDataErrors=True,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
NotifyOnSourceUpdated=True}">
</TextBox>
</DockPanel>
</Border>
我有一个 DockPanel,它由一个按钮和一个文本框组成。这些控件由边框包围。现在我想验证文本框并在验证失败时更改边框的颜色。
但是,在我当前的应用程序中,验证只影响文本框本身。
<Border>
<DockPanel>
<Button Command="{Binding GetFolder}">
<Button.Template>
<ControlTemplate>
<Image Source="/Assets/Icons/Folder.png"/>
</ControlTemplate>
</Button.Template>
</Button>
<TextBox
Text="{Binding
Path=DataFolder,
ValidatesOnDataErrors=True,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
NotifyOnSourceUpdated=True}">
</TextBox>
</DockPanel>
</Border>
我知道我可以给 Border 一个 ErrorTemplate:
<Border Validation.ErrorTemplate="{StaticResource errorTemplate}">...,
但是我如何告诉它文本框的验证结果?
您可以使用 Style
和 DataTrigger
绑定到 TextBox
的附加 Validation.HasError
属性:
<Border>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding (Validation.HasError),ElementName=tb}"
Value="True">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<DockPanel>
<Button Command="{Binding GetFolder}">
<Button.Template>
<ControlTemplate>
<Image Source="/Assets/Icons/Folder.png"/>
</ControlTemplate>
</Button.Template>
</Button>
<TextBox x:Name="tb"
Text="{Binding
Path=DataFolder,
ValidatesOnDataErrors=True,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
NotifyOnSourceUpdated=True}">
</TextBox>
</DockPanel>
</Border>