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