1

我正在尝试使用 Expanders 和 StackPanels 在 WPF 中创建手风琴风格的菜单。

我希望能够单击 Expander Header 并显示 StackPanel 而不显示箭头。当我单击箭头时,这是有效的,但是我想删除箭头。

当我从 Expander 的 ToggleButton 中删除“箭头”属性时,ToggleButton 是 Content Presenter 下方的一个小区域,用户难以点击。

有没有办法让扩展器的整个标题(包括文本)成为 ToggleButton?

在 Expander 的模板中,我有以下内容:

<ToggleButton IsChecked="{Binding Path=IsExpanded,Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" 
                                              OverridesDefaultStyle="True"  Template="{StaticResource ExpanderToggleButton}" Background="{StaticResource NormalBrush}" 
                                              Height="25">
                                </ToggleButton>
                                <ContentPresenter Margin="4" ContentSource="Header" RecognizesAccessKey="True" />

在“ExpanderToggleButton”中:

<ControlTemplate x:Key="ExpanderToggleButton" TargetType="ToggleButton">
        <Border Name="Border" CornerRadius="2,0,0,0" Background="Transparent" BorderBrush="{StaticResource NormalBorderBrush}" BorderThickness="0,0,1,0">
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="ToggleButton.IsMouseOver" Value="true">
                <Setter TargetName="Border" Property="Background" Value="Red" />
            </Trigger>
            <Trigger Property="IsPressed" Value="true">
                <Setter TargetName="Border" Property="Background" Value="{StaticResource PressedBrush}" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" />
                <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" />
                <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
4

1 回答 1

0

单独指定标题模板,如;

<Expander>
  <Expander.Header>
    .... (This is where your toggle button currently sits any way in a default template)
  </Expander.Header>
  <Expander.Content>
    ....
  </Expander.Content>
</Expander>

这样,您的标头模板应该像您的切换按钮一样接收 Mouse Down 事件,并且它适用于您的标头中显示的内容。

于 2012-09-04T15:32:57.843 回答