我正试图定位一个扩展区域的头部,并希望右侧有一个带有复选框和文本的扩展按钮。目前我有这个:
<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>
我想要的是:
每当我尝试更改方向时,我似乎都在移动带有文本和复选框的按钮。
改变方向后,我尝试了这样的事情:
<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>
这就是我的理由:
现在我只需要将复选框和文本的水平对齐方式设置在左侧。
答案 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