Кнопка расширения на правой стороне: как это сделать? - PullRequest
9 голосов
/ 07 января 2012

Expander in right side how ?

Я хочу расположить кнопку расширения на правой стороне этикетки. Как это сделать?

Ответы [ 4 ]

21 голосов
/ 10 сентября 2013

Вы также можете установить FlowDirection на RightToLeft, но это может вызвать другие проблемы. Например, он также изменяет направление потока для содержимого расширителя, поэтому вам может потребоваться установить его обратно.

<Expander FlowDirection="RightToLeft">
     <StackPanel FlowDirection="LeftToRight">
     </StackPanel>
</Expander>
6 голосов
/ 07 января 2012

Вы должны изменить стиль шаблона элемента управления. Вот пример: http://patconroy.wordpress.com/2008/12/18/restyling-the-wpf-expander-control/

2 голосов
/ 23 марта 2014

Другой способ подойти к этому - разместить расширитель там, где вам нужно, без заголовка или содержимого в самом расширителе. Затем свяжите видимость вашего контент-элемента управления со свойством 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.

0 голосов
/ 21 августа 2018

Вы можете использовать команды преобразования, чтобы перевернуть элементы управления

<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>
...