2012-04-27 2 views
0

Я просматривал stackoverflow, чтобы попытаться выяснить способ стилизации GridViewColumns в моем ListView. Я наткнулся на это:Styling GridViewColumns

WPF Text Formatting in GridViewColumn

Верхний ответ показывает, как стиль один (1) GridViewColumn. Мой вопрос в том, есть ли способ стилизовать эти GridViewColumns в Window.Resources, поэтому мне не нужно делать это для каждого отдельного GridViewColumn?

ответ

2

Есть несколько возможностей:

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