右侧的扩展按钮:怎么做?

时间:2012-01-07 13:16:53

标签: wpf xaml wpf-controls expander controltemplates

Expander in right side how ?

我想将Expander按钮放在标签的右侧。怎么做?

4 个答案:

答案 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>