如何在DataGrid.RowValidationErrorTemplate中使用StaticResource?

时间:2018-12-11 20:42:28

标签: c# wpf validation

在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>

1 个答案:

答案 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>