【问题标题】:Changing the UI from CLI to WPF将 UI 从 CLI 更改为 WPF
【发布时间】:2015-07-28 11:39:40
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你用什么Visibility enum来隐藏按钮?
  • 您能否详细说明绑定将如何帮助这个项目? (我已经开始阅读它,但这是一个漫长而广泛的主题,如果您能缩短我的搜索范围,我将不胜感激)
  • 我尝试了“隐藏”和“折叠”都没有奏效
  • @YairLandmann 使用自定义计算器,根据可见性绑定按钮的位置。或者只是首先以编程方式添加按钮,然后根据您的需要每次创建不同的按钮。
  • 这在 WPF 中应该可以正常工作...您的 XAML 代码是什么,以及按钮的排列不正确?

标签: c# wpf xaml visibility


【解决方案1】:

下面是一个完整的示例,可让您尝试折叠按钮。选择第一个复选框时,它将显示第一个按钮,第二个复选框 - 第二个按钮,依此类推。否则它们将被折叠。它应该为您提供进一步调查的起点。

注意:它使用BooleanToVisibilityConverter,它将可见性设置为Collapsed(当false)和Visible(当true)。

这是完整的工作示例。只需将其复制粘贴到 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>

【讨论】:

  • 这是一个非常有助于理解概念的示例,谢谢,但是我可以使用绑定到 Enum 参数,所以假设 ADMIN 将能够访问所有函数,并且“USER”可以访问只有一个功能?
  • 在示例中可见性绑定到falsetrue。如果要将其绑定到其他东西,则必须创建自己的转换器。否则 WPF 引擎不知道如何解释您的自定义枚举和可见性枚举之间的关系。
  • 我在哪里可以编写布尔函数假设我想使用绑定到文本块并在输入的数字为奇数时显示按钮 1 和 3,如果输入的数字为偶数则显示按钮 2 和 4?再次感谢!!!!
  • 给这只猫剥皮的方法有很多。决定取决于您的上下文、您想要涉及的复杂性、技术、设计等。一些可用的选项(并且列表并不详尽): 执行此操作的代码中的方法;转换器;绑定到视图模型中的某些属性(如果您正在执行 mvvm);根据用户的凭据重新排列加载按钮。但电话是你的。根据您的情况调查选项并相应地应用。毕竟在软件开发中分析需求和做出决策才是你真正要做的事情。
猜你喜欢
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2011-03-31
  • 1970-01-01
  • 2017-06-07
相关资源
最近更新 更多