2017-12-06 23 views
0

RowDetailsを展開/折りたたむためにRowHeader Expanderを使用するRowDetailsを持つWPF DataGridがあります。 RowHeader Expander ToggleButtonのスタイルを、リソースディクショナリで定義されたToggleButtonスタイルに設定しようとしています。私はこれを試してみました:wpf datagrid rowheader expanderリソースディクショナリのtogglebutttonスタイル

<DataGrid.RowHeaderTemplate> 
<DataTemplate> 
    <Expander Expanded="Expander_Expanded" Collapsed="Expander_Collapsed" > 
     <Style TargetType="ToggleButton" BasedOn="{StaticResource ExpandCollapseToggleStyle}" /> 
    </Expander> 
</DataTemplate> 

これはコンパイルが、トグルボタンのスタイルを変更しません。

答えて

0

それほど簡単ではありません。 RowHeaderTemplateExpanderを強制している場合は、実際にExpanderオブジェクトのスタイルを設定して、ToggleButtonに埋め込まれているオブジェクトに影響を与える必要があります。

以下は、Aero.Normal WPFテーマのExpanderオブジェクトのデフォルトのスタイリングです。これをベースとして、内部に含まれているToggleButtonを変更することができます。

<Style x:Key="{x:Type Expander}" 
     TargetType="{x:Type Expander}"> 
    <Setter Property="Foreground" 
      Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
    <Setter Property="Background" 
      Value="Transparent"/> 
    <Setter Property="HorizontalContentAlignment" 
      Value="Stretch"/> 
    <Setter Property="VerticalContentAlignment" 
      Value="Stretch"/> 
    <Setter Property="BorderBrush" 
      Value="Transparent"/> 
    <Setter Property="BorderThickness" 
      Value="1"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Expander}"> 
       <Border BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         Background="{TemplateBinding Background}" 
         CornerRadius="3" 
         SnapsToDevicePixels="true"> 
        <DockPanel> 
         <ToggleButton x:Name="HeaderSite" 
             DockPanel.Dock="Top" 
             Margin="1" 
             MinWidth="0" 
             MinHeight="0" 
             Style="{StaticResource ExpanderDownHeaderStyle}" 
             FocusVisualStyle="{StaticResource ExpanderHeaderFocusVisual}" 
             IsChecked="{Binding Path=IsExpanded,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" 
             Content="{TemplateBinding Header}" 
             ContentTemplate="{TemplateBinding HeaderTemplate}" 
             ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}" 
             Foreground="{TemplateBinding Foreground}" 
             Padding="{TemplateBinding Padding}" 
             FontFamily="{TemplateBinding FontFamily}" 
             FontSize="{TemplateBinding FontSize}" 
             FontStyle="{TemplateBinding FontStyle}" 
             FontStretch="{TemplateBinding FontStretch}" 
             FontWeight="{TemplateBinding FontWeight}" 
             HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
             VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> 
         <ContentPresenter x:Name="ExpandSite" 
              DockPanel.Dock="Bottom" 
              Visibility="Collapsed" 
              Focusable="false" 
              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
              VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
              Margin="{TemplateBinding Padding}"/> 
        </DockPanel> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsExpanded" 
          Value="true"> 
         <Setter Property="Visibility" 
           Value="Visible" 
           TargetName="ExpandSite"/> 
        </Trigger> 
        <Trigger Property="ExpandDirection" 
          Value="Right"> 
         <Setter Property="DockPanel.Dock" 
           Value="Right" 
           TargetName="ExpandSite"/> 
         <Setter Property="DockPanel.Dock" 
           Value="Left" 
           TargetName="HeaderSite"/> 
         <Setter Property="Style" 
           Value="{StaticResource ExpanderRightHeaderStyle}" 
           TargetName="HeaderSite"/> 
        </Trigger> 
        <Trigger Property="ExpandDirection" 
          Value="Up"> 
         <Setter Property="DockPanel.Dock" 
           Value="Top" 
           TargetName="ExpandSite"/> 
         <Setter Property="DockPanel.Dock" 
           Value="Bottom" 
           TargetName="HeaderSite"/> 
         <Setter Property="Style" 
           Value="{StaticResource ExpanderUpHeaderStyle}" 
           TargetName="HeaderSite"/> 
        </Trigger> 
        <Trigger Property="ExpandDirection" 
          Value="Left"> 
         <Setter Property="DockPanel.Dock" 
           Value="Left" 
           TargetName="ExpandSite"/> 
         <Setter Property="DockPanel.Dock" 
           Value="Right" 
           TargetName="HeaderSite"/> 
         <Setter Property="Style" 
           Value="{StaticResource ExpanderLeftHeaderStyle}" 
           TargetName="HeaderSite"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" 
          Value="false"> 
         <Setter Property="Foreground" 
           Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

このスタイルを使用すると、ExpanderDownHeaderStyleリソースが見つからないというランタイムエラーが発生します。おそらく私はAero2を参照しているからでしょうか?このxamlの生成方法を教えてください。おそらく私はAero2を使ってデータグリッドからそれを生成することができます。 – John

+0

はい、これをそのまま使用しようとするとエラーが発生します。これはちょうどベースエクスパンダスタイルです。トグルに必要なスタイルを作成して、エクスパンダを適切に変更する必要があります。 – Stewbob

関連する問題