是否可以在WPF中更改验证错误模板的属性?



我正在使用验证。属性,在任何无效控件的旁边显示一个图标。

对于视图中的一个特定控件,我需要将图标设置在稍微不同的位置。我是否有可能使用相同的控件模板,但以某种方式更新某个控件的Margin属性?

这是我的(删节)代码:

<UserControl>
<UserControl.Resources>
<ControlTemplate x:Key="ValidationTemplate" TargetType="Control">
<DockPanel>
<Grid
DockPanel.Dock="Right"
Height="16"
Margin="10,0,0,0"
VerticalAlignment="Center"
Width="16">
<Image
AutomationProperties.AutomationId="_validationIcon"
Source="{x:Static icons:Icons.ValidationIcon}"
ToolTip="{Binding Path=ErrorContent}" />
</Grid>
<AdornedElementPlaceholder />
</DockPanel>
</ControlTemplate>
<ItemsControl Validation.ErrorTemplate="{StaticResource ValidationTemplate}" />
</UserControl>

我设法实现我需要的唯一方法是为需要不同图标放置的控件创建一个新的ControlTemplate。如果可能的话,我宁愿重用我原来的控件模板。

我在我的旧项目中有完全相同的需求。我使用附加的依赖属性解决了这个问题:

public static class ErrorTemplateProperties
{
public static readonly DependencyProperty ErrorMarginProperty = DependencyProperty.RegisterAttached
(
"ErrorMargin",
typeof(Thickness),
typeof(ErrorTemplateProperties),
new FrameworkPropertyMetadata(new Thickness(10,0,0,0))
);
public static Thickness GetErrorMargin(DependencyObject obj)
{
return (Thickness)obj.GetValue(ErrorMarginProperty);
}
public static void SetErrorMargin(DependencyObject obj, Thickness value)
{
obj.SetValue(ErrorMarginProperty, value);
}
}

添加到ValidationTemplate:

<ControlTemplate x:Key="ValidationTemplate" TargetType="Control">
<DockPanel>
<Grid
DockPanel.Dock="Right"
Margin="{Binding Path=AdornedElement.(local:ErrorTemplateProperties.ErrorMargin), ElementName=ui}"
Height="16"
VerticalAlignment="Center"
Width="16">
<Image
AutomationProperties.AutomationId="_validationIcon"
Source="{x:Static icons:Icons.ValidationIcon}"
ToolTip="{Binding Path=ErrorContent}" />
</Grid>
<AdornedElementPlaceholder x:Name="ui"/>
</DockPanel>
</ControlTemplate>

,然后可选择更改所需的UI元素:

<ItemsControl helpers:ErrorTemplateProperties.ErrorMargin="0,0,0,0" 
Validation.ErrorTemplate="{StaticResource ValidationTemplate}" />

我也发现了动态资源的解决方案,但附加的DP在我看来更灵活和简洁

相关内容

最新更新