我想将Expander按钮放在标签的右侧。怎么做?
答案 0 :(得分:21)
您也可以将FlowDirection
设置为RightToLeft
,但这可能会导致其他问题。例如,它还会更改扩展器内容的流向,因此您可能需要将其设置回来。
<Expander FlowDirection="RightToLeft">
<StackPanel FlowDirection="LeftToRight">
</StackPanel>
</Expander>
答案 1 :(得分:6)
您必须重新设置控件的模板。这是一个例子:http://patconroy.wordpress.com/2008/12/18/restyling-the-wpf-expander-control/
答案 2 :(得分:2)
另一种解决方法是将扩展器放置在您喜欢的位置,扩展器本身没有任何标头或内容。
然后使用BooleanToVisibilityConverter将内容控件的可见性绑定到扩展器IsExpanded
属性。
<StackPanel>
<StackPanel.Resources>
<BooleanToVisibilityConverter x:Key="boolToVisibility" />
</StackPanel.Resources>
<DockPanel>
<Expander DockPanel.Dock="Right" x:Name="rightAlignedExpander" />
<TextBlock Text="Expanders header" VerticalAlignment="Center" />
</DockPanel>
<Grid Visibility="{Binding IsExpanded, ElementName=rightAlignedExpander, Converter={StaticResource boolToVisibility}}">
<TextBlock Text="Expanders content"/>
</Grid>
</StackPanel>
缺点是单击标题时它不会扩展,但如果需要,可以轻松实现。
我个人认为这更简单,更直接,而不是完全重新设置控件的模板。它还有一个额外的好处,它将保留已经应用于扩展器的任何样式,例如在使用DevExpress或Telerik等第三方主题时。
答案 3 :(得分:0)
您可以使用tranform命令来翻转控件
<Expander RenderTransformOrigin="0.5,0.5">
<Expander.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="1" ScaleX="-1" />
<SkewTransform AngleY="0" AngleX="0" />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</Expander.RenderTransform>
<Expander.Header>
<Grid RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="1" ScaleX="-1" />
<SkewTransform AngleY="0" AngleX="0" />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</Grid.RenderTransform>
<TextBlock>Text</TextBlock>
</Grid>
</Expander.Header>
<Grid Height="100" RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="1" ScaleX="-1" />
<SkewTransform AngleY="0" AngleX="0" />
<RotateTransform Angle="0" />
<TranslateTransform />
</TransformGroup>
</Grid.RenderTransform>
<TextBlock>Text</TextBlock>
</Grid>
</Expander>