15

右侧的扩展器如何?

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

4

4 回答 4

33

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

<Expander FlowDirection="RightToLeft">
     <StackPanel FlowDirection="LeftToRight">
     </StackPanel>
</Expander>
于 2013-09-10T10:11:35.357 回答
8

You must restyle the control's template. Here's an example: http://patconroy.wordpress.com/2008/12/18/restyling-the-wpf-expander-control/

于 2012-01-07T13:32:19.363 回答
4

解决此问题的另一种方法是将扩展器放置在您喜欢的位置,而扩展器本身没有任何标题或内容。然后IsExpanded使用BooleanToVisibilityConverter将内容控件的可见性绑定到扩展器属性。

<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 等 3rd 方主题时。

于 2014-03-23T13:51:07.807 回答
1

您可以使用转换命令来翻转控件

<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>
于 2018-08-21T03:02:44.627 回答