我的应用程序中有几个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”等属性,...
提前感谢您的帮助。
弗雷德
发布于 2010-11-23 17:15:43
由于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>发布于 2010-11-23 16:21:18
你在这里谈论的是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还是dataTemplate,两个都试一下,看看哪一个合适
发布于 2010-11-23 17:04:33
对于“外部”资源文件,您可以简单地将其放入在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>https://stackoverflow.com/questions/4253875
复制相似问题