我想将扩展按钮放置在标签的右侧,该怎么做?
您也可以将FlowDirection
设置为RightToLeft
,但这可能会导致其他问题。例如,它还会更改扩展程序内容的流向,因此您可能需要将其设置回来。
<Expander FlowDirection="RightToLeft">
<StackPanel FlowDirection="LeftToRight">
</StackPanel>
</Expander>
您需要重新设计控件的模板。这里有一个例子:http://patconroy.wordpress.com/2008/12/18/restyling-the-wpf-expander-control/
另一种方法是将扩展器放置在您喜欢的位置,而不需要在扩展器本身中添加标题或内容。
然后,使用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等第三方主题时。
<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>