我正在使用 c# wpf 应用程序,我的主窗口包含一个将我的页面分成两列的网格。第一列包含 StackPanel 内的按钮,这是我的问题:
我的代码应该为每个进入程序的用户提供不同的按钮。 我试图更改不需要的按钮的可见性以隐藏/折叠。
我面临的问题是,我希望我的按钮能够自行重新排列,以便它们一个位于另一个之上(当我更改按钮的可见性时,按钮之前的位置会留下一个空白区域)。
我的问题是:当可见性改变时,我能否让我的按钮自动排列,或者是否可以在我的 xaml 代码中添加 if
语句(在它们内部创建一个按钮)?
最佳答案
下面是一个完整的示例,可让您试验折叠按钮。选择第一个复选框时,它将显示第一个按钮,第二个复选框 - 第二个按钮等等。否则他们会崩溃。它应该为您提供进一步调查的起点。
注意:它使用BooleanToVisibilityConverter当 false
时将可见性设置为 Collapsed
,当 true
时将可见性设置为 Visible
。
这是完整的工作示例。只需将其复制粘贴到 WPF 中的新窗口即可:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="b2v" />
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<Button Content="1" Height="40" Visibility="{Binding IsChecked,ElementName=visChk1,Converter={StaticResource b2v}}"/>
<Button Content="2" Height="40" Visibility="{Binding IsChecked,ElementName=visChk2,Converter={StaticResource b2v}}"/>
<Button Content="3" Height="40" Visibility="{Binding IsChecked,ElementName=visChk3,Converter={StaticResource b2v}}"/>
<Button Content="4" Height="40" Visibility="{Binding IsChecked,ElementName=visChk4,Converter={StaticResource b2v}}"/>
</StackPanel>
<StackPanel Grid.Column="1">
<CheckBox x:Name="visChk1" HorizontalAlignment="Center"/>
<CheckBox x:Name="visChk2" HorizontalAlignment="Center"/>
<CheckBox x:Name="visChk3" HorizontalAlignment="Center"/>
<CheckBox x:Name="visChk4" HorizontalAlignment="Center"/>
</StackPanel>
</Grid>
</Window>
关于c# - 将 UI 从 CLI 更改为 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30278269/