c# - 将 UI 从 CLI 更改为 WPF

标签 c# wpf xaml visibility

我正在使用 c# wpf 应用程序,我的主窗口包含一个将我的页面分成两列的网格。第一列包含 StackPanel 内的按钮,这是我的问题:

我的代码应该为每个进入程序的用户提供不同的按钮。 我试图更改不需要的按钮的可见性以隐藏/折叠。

我面临的问题是,我希望我的按钮能够自行重新排列,以便它们一个位于另一个之上(当我更改按钮的可见性时,按钮之前的位置会留下一个空白区域)。

我的问题是:当可见性改变时,我能否让我的按钮自动排列,或者是否可以在我的 xaml 代码中添加 if 语句(在它们内部创建一个按钮)?

最佳答案

下面是一个完整的示例,可让您试验折叠按钮。选择第一个复选框时,它将显示第一个按钮,第二个复选框 - 第二个按钮等等。否则他们会崩溃。它应该为您提供进一步调查的起点。

注意:它使用BooleanToVisibilityConverterfalse 时将可见性设置为 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/

相关文章:

c# - 让 ListView 有一个像联系人应用程序一样的过滤器

wpf - 如何动态绑定(bind)和静态添加 MenuItem?

c# - 文本框样式 - 绑定(bind)到文本的宽度

c# - 注入(inject)创建成本高昂的服务

c# - ReactiveUI、WPF 和验证

c# - WPF 更改聚焦的文本框背景颜色

wpf - 多个自动列定义导致奇怪的 GridSplitter 行为

c# - 为 iPhone 应用程序抓取 MS SQL Server 数据?

c# - Response.Redirect 到新窗口

c# - SQLITE 内连接 Windows Phone 8