2011-09-11 9 views
3

DataGrid.GroupStyleを自分のスタイルで設定したいので、各データグリッドに対して相互になり、ビューファイルではなく、各データグリッドに別々に設定する必要があります。 これは私が今持っているものです、私が欲しいものスタイルでDataGrid.GroupStyleを設定する

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

答えて

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); 
     } 
    } 
}