在DataGrid中,我具有可以完美运行的RowValidationErrorTemplate。我的应用程序中有几个DataGrid,我想使用相同的ControlTemplate。我该怎么办?
<DataGrid.RowValidationErrorTemplate>
<ControlTemplate>
<Grid Margin="0,-2,0,-2"
ToolTip="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}},
Path=(Validation.Errors)[0].ErrorContent}">
<Ellipse StrokeThickness="0" Fill="Red" Width="{TemplateBinding FontSize}"
Height="{TemplateBinding FontSize}"/>
<TextBlock Text="!" FontSize="{TemplateBinding FontSize}" FontWeight="Bold" Foreground="White"
HorizontalAlignment="Center"/>
</Grid>
</ControlTemplate>
</DataGrid.RowValidationErrorTemplate>
答案 0 :(得分:1)
您应该在App.xaml或资源字典中的Window.Resources或Application.Resources中定义模板,为其指定一个x:Name并将其应用于所需的DataGrid:
<Window....>
<Window.Resources>
<ControlTemplate x:Name="DataGridRowErrorTemplate">
//Your template
</ControlTemplate>
</Window.Resources
</Window>
或者,特别是如果您有多个要在其中应用模板的DataGrid的窗口,则可以将其添加到App.xaml文件Application.Resources:
<Application...>
<Application.Resources>
<ControlTemplate x:Name="DataGridRowErrorTemplate">
//Your template
</ControlTemplate>
<Application.Resources>
</Application>
或者您将资源文件添加到项目中:在“解决方案已浏览”中右键单击该项目=>添加=> WPF =>资源字典,为其命名(例如MyDictionary),将模板放入其中,然后添加到App.xaml
<Application...>
<Application.Resources>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="MyDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Application.Resources>
</Application>
然后在DataGrid定义中执行以下操作:
<DataGrid RowValidationErrorTemplate={StaticResource DataGridRowErrorTemplate}>
</DataGrid>