それほど簡単ではありません。 RowHeaderTemplate
にExpander
を強制している場合は、実際に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>
このスタイルを使用すると、ExpanderDownHeaderStyleリソースが見つからないというランタイムエラーが発生します。おそらく私はAero2を参照しているからでしょうか?このxamlの生成方法を教えてください。おそらく私はAero2を使ってデータグリッドからそれを生成することができます。 – John
はい、これをそのまま使用しようとするとエラーが発生します。これはちょうどベースエクスパンダスタイルです。トグルに必要なスタイルを作成して、エクスパンダを適切に変更する必要があります。 – Stewbob