我正在浏览stackoverflow,试图找出一种在我的ListView 中设置GridViewColumns 样式的方法。我遇到了这个:
最佳答案显示了如何设置一 (1) 个 GridViewColumn 的样式。我的问题是,有没有办法在 Window.Resources 中设置这些 GridViewColumns 的样式,这样我就不必为每个单独的 GridViewColumn 都这样做?
我正在浏览stackoverflow,试图找出一种在我的ListView 中设置GridViewColumns 样式的方法。我遇到了这个:
最佳答案显示了如何设置一 (1) 个 GridViewColumn 的样式。我的问题是,有没有办法在 Window.Resources 中设置这些 GridViewColumns 的样式,这样我就不必为每个单独的 GridViewColumn 都这样做?
有几种可能:
<!-- if style doesn't change -->
<GridViewColumn CellTemplate="{StaticResource yourCellTemplate}"/>
<!-- if you need to change it up based on criteria - template selector-->
<GridViewColumn CellTemplateSelector="{StaticResource YourTemplateSelector}"/>
<!-- same goes for headers -->
<GridViewColumn HeaderTemplate="{StaticResource yourheaderTempalte}"/>
..or HeaderContainerStyle, HeaderTemplateSelector
如果你想使用模板选择器:创建一个类,在资源字典中实例化它,然后将它插入你的 gridview 列,这里有一个小示例
public class MyTemplateSelector : DataTemplateSelector
{
public DataTemplate SimpleTemplate { get; set; }
public DataTemplate ComplexTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
//if I have just text
return SimpleTemplate;
//if I have comments and other fancy stuff
return ComplexTemplate;
然后在你的 ResourceDictionary
<DataTemplate x:Key="ComplexTemplate">
<Views:MyCustomControl DataContext="{Binding}"/>
</DataTemplate>
<Views:MyTemplateSelector
x:Key="TxtVsExpensiveCell_TemplateSelector"
SimpleTemplate ="{StaticResource SimpleTemplate}"
ComplexTemplate="{StaticResource ComplexTemplate}"/>
<!-- then you use it in your view like this -->
<GridViewColumn CellTemplateSelector="{StaticResource TxtVsExpensiveCell_TemplateSelector}"/>
如果您不想经历所有这些麻烦,只是想调整预定义控件的样式,为什么不使用 DataGrid?它具有预定义的列,您可以在其中调整每个列的样式。
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn/>
<DataGridCheckBoxColumn/>
<DataGridHyperlinkColumn/>
<DataGridCheckBoxColumn/>
....there are several more column types!
</DataGrid.Columns>
</DataGrid>