在样式中设置DataGrid.GroupStyle

3

我希望在我的样式中设置DataGrid.GroupStyle,这样它将对所有DataGrid都有效,而不是在视图文件中单独设置每个DataGrid。

这是我现在拥有的:

<Style  x:Key="DGView" TargetType="DataGrid">
    <Setter Property="Height" Value="Auto" />
    <Setter Property="Margin" Value="0,3,0,0" />
    <Setter Property="RowHeaderWidth" Value="0" />
    <Setter Property="SelectionMode" Value="Single" />
    <Setter Property="SelectionUnit" Value="FullRow" />
    <Setter Property="CanUserAddRows" Value="False" />
    <Setter Property="CanUserDeleteRows" Value="False" />
    <Setter Property="AutoGenerateColumns" Value="False" />
    <Setter Property="HorizontalAlignment" Value="Stretch" />
    <Setter Property="DataGrid.CellStyle" Value="{StaticResource DGCell}" />
</Style>

<DataGrid Style="{StaticResource DGSecondaryView}" >

    <DataGrid.GroupStyle>
        <GroupStyle ContainerStyle="{StaticResource GIView}" >
            <GroupStyle.Panel>
                <ItemsPanelTemplate>
                    <DataGridRowsPresenter/>
                </ItemsPanelTemplate>
            </GroupStyle.Panel>
        </GroupStyle>
    </DataGrid.GroupStyle>

    <DataGrid.Columns>
        <DataGridTextColumn Header="BookID" Binding="{Binding BookID}" Visibility="Collapsed"/>
        <DataGridTextColumn Header="Title" Binding="{Binding Title, Converter={StaticResource StringToOffset}}" Width="3*" IsReadOnly="True" />
        <DataGridTextColumn Header="Sequence" Binding="{Binding Sequence}" Width="3*" IsReadOnly="True" />
        <DataGridTextColumn Header="Number" Binding="{Binding Number}" Width="1*" IsReadOnly="True" CellStyle="{StaticResource  Numeric}" />
    </DataGrid.Columns>

</DataGrid>

我想要的是将以下代码插入到样式标签中。这可行吗?
<DataGrid.GroupStyle>
    <GroupStyle ContainerStyle="{StaticResource GIView}" >
        <GroupStyle.Panel>
            <ItemsPanelTemplate>
                <DataGridRowsPresenter/>
            </ItemsPanelTemplate>
        </GroupStyle.Panel>
    </GroupStyle>
</DataGrid.GroupStyle>
1个回答

2

我需要为一个ListBox做这个操作,所以我创建了一个继承自ListBox的新控件,并添加了一个可绑定和可样式化的属性。同样的方法也可以用于DataGrid。

public class MyListBox : ListBox 
{ 
    public GroupStyle DefaultGroupStyle 
    { 
        get { return (GroupStyle)GetValue(DefaultGroupStyleProperty); } 
        set { SetValue(DefaultGroupStyleProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for DefaultGroupStyle.  This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty DefaultGroupStyleProperty = 
        DependencyProperty.Register("DefaultGroupStyle", typeof(GroupStyle), typeof(MyListBox), new UIPropertyMetadata(null, DefaultGroupStyleChanged)); 

    private static void DefaultGroupStyleChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) 
    { 
        ((MyListBox)o).SetDefaultGroupStyle(e.NewValue as GroupStyle); 
    } 

    private void SetDefaultGroupStyle(GroupStyle defaultStyle) 
    { 
        if (defaultStyle == null) 
        { 
            return; 
        } 

        if (this.GroupStyle.Count == 0) 
        { 
            this.GroupStyle.Add(defaultStyle); 
        } 
    } 
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接