我在我的应用程序中有几个DataGrid,它们每个都有相同的“模板”。例如,以下是每个DataGrid的定义方式:
<DataGrid Style="{StaticResource MainGridStyle}">
<DataGrid.Columns>
<DataGridTemplateColumn CanUserResize="False"
CanUserSort="False"
CanUserReorder="False"
CellStyle="{StaticResource RightCellStyle}">
...
如何在外部资源文件中将“DataGridTemplateColumn”定义为模板,因此我只需编写类似
的内容<DataGridTemplateColumn Style={StaticResource MyFirstColumn}/>
在“MainGridStyle”中,我定义了“CanUserAddRows”等属性,......
请事先提供帮助。
佛瑞德
答案 0 :(得分:4)
你在谈论4件不同的事情:
所以让我们先说清楚: 选择一个并坚持下去,尽量不要混合风格和模板(无论如何都可以包含另一个)
现在根据我的理解,你对第一列的模板比整个dataGrid更感兴趣。
应该很容易:
1)首先,在资源字典中声明列的模板(或样式)(最好是在应用程序的资源中):
<Application.Resources>
<Template TargetType="DataGridTemplateColumn" x:Key="MyFirstColumnTemplate ">
...
</Template>
</Application.Resources>
2)然后,只需按照您想要的方式调用它:
<DataGrid Style="{StaticResource MainGridStyle}">
<DataGrid.Columns>
<DataGridTemplateColumn Template="{StaticResource MyFirstColumnTemplate}"/>
...
</DataGrid.Columns>
<DataGrid>
修改强>
对于dataGridTemplateColumn,由于您只有CellTemplate和CellEditingTemplate属性可用,您可以执行以下操作:
<Application.Resources>
<DataTemplate x:Key="CellTemplate">
...
</DataTemplate>
<DataTemplate x:Key="CellEdintingTemplate">
...
</DataTemplate>
</Application.Resources>
<DataGrid Style="{StaticResource MainGridStyle}">
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource MyFirstColumnCellTemplate}" CellEdintingTemplate="{StaticResource MyFirstColumnCellEdintingTemplate}"/>
...
</DataGrid.Columns>
<DataGrid>
免责声明:我不确定它是一个controlTemplate还是一个用于单元格(编辑)模板的数据模板,尝试两者并看看哪一个适合
答案 1 :(得分:1)
由于DataGridTemplateColumn
没有Style
属性,因此您可以做的一件事是创建附加属性。
以下是一个例子:
[注意:您可能需要更改以下代码以适合您的项目。]
具有附加属性的类 -
public class StyleExtensions
{
public static Style GetStyle(DependencyObject obj)
{
return (Style)obj.GetValue(StyleProperty);
}
public static void SetStyle(DependencyObject obj, Style value)
{
obj.SetValue(StyleProperty, value);
}
public static void StyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Style style = e.NewValue as Style;
if (style != null)
{
foreach (var s in style.Setters.OfType<Setter>())
{
d.SetValue(s.Property, s.Value);
}
}
}
// Using a DependencyProperty as the backing store for Style. This enables animation, styling, binding, etc...
public static readonly DependencyProperty StyleProperty =
DependencyProperty.RegisterAttached("Style", typeof(Style), typeof(StyleExtensions), new UIPropertyMetadata(StyleChanged));
}
Style
-
<Style x:Key="MyFirstColumn">
<Setter Property="DataGridColumn.CanUserResize"
Value="False" />
<Setter Property="DataGridColumn.CanUserSort"
Value="False" />
<Setter Property="DataGridColumn.CanUserReorder"
Value="False" />
<Setter Property="DataGridColumn.CellStyle"
Value="{StaticResource RightCellStyle}" />
</Style>
使用 -
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn local:StyleExtensions.Style="{StaticResource MyFirstColumn}"></DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
答案 2 :(得分:0)
对于“外部”资源文件,您只需将其放在您在app.xaml文件中调用的资源字典中:
在“customTemplates.xaml”文件中:
<ResourceDictionary>
...
</ResourceDictionary>
然后在你的“app.xaml”文件中:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="customTemplates.xaml" />
...
//add other resource dictionaries here if any
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>