WPF Как мне выровнять кнопки справа по x количеству кнопок

#wpf

#wpf

Вопрос:

Я пытаюсь выровнять кнопки справа от dockpanel, но я скрываю и показываю кнопки на основе определенных критериев. Мне нужно, как правильно обосновать, основываясь на том, что показано. В настоящее время я использую это:

     <DockPanel HorizontalAlignment="Stretch" Height="34" Margin="0,0,2,35" VerticalAlignment="Bottom">
        <Button DockPanel.Dock="Right" Height="23" x:Name="btnOne" Click="btnOne_Click" Margin="0,0,5,5" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="Auto">
            <TextBlock x:Name="txtBtnOneText" />
        </Button>
        <Button DockPanel.Dock="Right" Height="23" Width="Auto" x:Name="btnTwo" Visibility="Hidden" Click="btnTwo_Click" HorizontalAlignment="Right" Margin="0,0,5,5" VerticalAlignment="Bottom">
            <TextBlock x:Name="txtBtnTwoText" />
        </Button>
    </DockPanel>
  

Когда я показываю только кнопку btnOne, я хочу, чтобы она была выровнена по правому краю, когда я показываю только btnTwo, я хочу, чтобы она была выровнена по правому краю, или когда я показываю их обе, я хотел бы, чтобы btnOne находился крайний справа, а btnTwo — на расстоянии 5 пикселей слева от btnOne.

Спасибо!

Ответ №1:

Вместо dockpanel попробуйте использовать stackpanel следующим образом —

         <StackPanel Grid.Row="0" Orientation="Horizontal">
            <Button x:Name="btn1" Content="btn1" Height="34" />
            <Button x:Name="btn2" Margin="5,0,0,0" Content="btn2" Height="34" />
        </StackPanel>
  

И просто установите видимость кнопки в свернутом виде вместо скрытой, когда вы хотите скрыть одну кнопку, и она не займет отведенное для нее место. В то время как, если вы установите видимость на скрытую, она не будет отображаться в пользовательском интерфейсе, но все равно займет отведенное для нее место.

Ответ №2:

Итак, с чем у вас возникли проблемы? Я бы сделал это, используя простой StackPanel :

 <StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
    <Button>One</Button>
    <Button Margin="3 0 0 0">Two</Button>
</StackPanel>
  

Комментарии:

1. привет, Кент, спасибо за ответ. У меня возникли проблемы с тем, что если btnTwo является единственным отображаемым, то мне нужно заменить его на позицию btnOne и наоборот. Тогда, если показаны обе, у btnTwo должно быть правое поле в 5 пикселей.

Ответ №3:

Для меня это работало намного лучше с сетками вместо StackPanel

 <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*" />
        <ColumnDefinition Width="32" />
    </Grid.ColumnDefinitions>
    <TextBlock Name="TextBlock" Grid.Column="0" Text="This is a text block" B TextAlignment="Center" />
    <Button x:Name="CloseButton" Grid.Column="1" FontSize="12" Content="X" Click="CloseButton_Click" />
</Grid>