右侧的展开按钮:如何实现?

19

如何将扩展按钮放置在标签的右侧?

我想将扩展按钮放置在标签的右侧,该怎么做?

4个回答

36

您也可以将FlowDirection设置为RightToLeft,但这可能会导致其他问题。例如,它还会更改扩展程序内容的流向,因此您可能需要将其设置回来。

<Expander FlowDirection="RightToLeft">
     <StackPanel FlowDirection="LeftToRight">
     </StackPanel>
</Expander>

8

1
链接的网页由于空间原因没有显示完整代码 (因此如果您只是复制和粘贴它,它将无法正常工作),而其提供的全源代码文件链接已经失效。甚至它评论中提到的链接也已经失效了。毕竟,这个网页已经有13年历史了。我需要一些能正常工作的完整示例代码。 - Damn Vegetables

4

另一种方法是将扩展器放置在您喜欢的位置,而不需要在扩展器本身中添加标题或内容。 然后,使用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
您可以使用转换命令来翻转控件。
<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接