WPF Orienting Expander Header

时间:2017-11-02 19:15:12

标签: wpf

我正试图定位一个扩展区域的头部,并希望右侧有一个带有复选框和文本的扩展按钮。目前我有这个:

<Expander Margin="5" IsExpanded="False" FlowDirection="RightToLeft">
  <Expander.Header>
    <StackPanel Orientation="Horizontal" >
      <CheckBox IsChecked="{Binding Selected}" ></CheckBox>
      <TextBlock Text="{Binding FileName}" />
      <TextBlock Text="{Binding FileName}" />
    </StackPanel>
  </Expander.Header>

enter image description here

我想要的是:

enter image description here

每当我尝试更改方向时,我似乎都在移动带有文本和复选框的按钮。

改变方向后,我尝试了这样的事情:

<ItemsControl x:Name="ISOs">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Expander Margin="5" IsExpanded="False" FlowDirection="RightToLeft">
                <Expander.Header>
                    <StackPanel Orientation="Horizontal" FlowDirection="LeftToRight" >

                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="15"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                        </Grid>

                        <CheckBox IsChecked="{Binding Selected}" Grid.Column="0" ></CheckBox>
                        <TextBlock Text="{Binding FileName}" Grid.Column="1" />
                    </StackPanel>
                </Expander.Header>

这就是我的理由:

enter image description here

现在我只需要将复选框和文本的水平对齐方式设置在左侧。

1 个答案:

答案 0 :(得分:4)

此处也提出了类似的问题:How to put Expander ToggleButton on right

<Expander Margin="5" IsExpanded="False" FlowDirection="RightToLeft">
    <Expander.Header>
        <StackPanel
            Orientation="Horizontal"
            Width="{Binding RelativeSource={RelativeSource AncestorType=Expander}, Path=ActualWidth}" 
            Margin="-30,0,0,0"
            HorizontalAlignment="Left" FlowDirection="LeftToRight">
            <CheckBox IsChecked="True" ></CheckBox>
            <TextBlock Text="Text One" />
            <TextBlock Text="Text Two" />
        </StackPanel>
    </Expander.Header>
</Expander>

你必须&#34;重置&#34;标题内的flowdirection。这将按正确的顺序对StackPanel内的元素进行排序。

不幸的是,StackPanel将与右侧对齐。除了将它设置为扩展器宽度之外,没有干净的方法可以左对齐它:Width="{Binding RelativeSource={RelativeSource AncestorType=Expander}, Path=ActualWidth}"

  

另一个(也许更干净)的解决方案是覆盖模板   HeaderTemplate

快速测试显示,这没有帮助。 HeaderTemplate的行为或多或少与标题内容相似。这使您可以覆盖整个控件模板,这可能是不可行的。 But if you want to: MSDN has the control template on it's docs