【问题标题】:Switch WPF UI controls dynamically动态切换 WPF UI 控件
【发布时间】:2020-01-27 07:03:39
【问题描述】:

我需要开发一个简单的 WPF 应用程序。在 UI 窗口中,左侧有标签和文本块,右侧有按钮。

Figure 1

基于配置设置(用户是左撇子还是右撇子)我需要切换控件,向左切换按钮,向右切换标签和文本块。

Figure 2

您能否推荐一个解决此要求的好方法?

【问题讨论】:

  • 定义2个模板,根据配置选择合适的一个。那里有很多样品。

标签: wpf user-interface wpf-controls


【解决方案1】:

取决于应用的范围可能是什么。

2 个备选方案:

1)

我认为随着应用程序的发展,它可能会不仅仅是按钮。

我可能会构建一个用户控件来封装标签和控件的这种行为。用户控件使用静态来决定文本块的位置,但看起来类似于以下行编辑控件:

https://gallery.technet.microsoft.com/WPF-Entity-Framework-MVVM-78cdc204

哪个是用户控件,其中有一个 contentpresenter,因此您可以将任何您喜欢的控件(例如按钮)“放入”其中并为标签设置依赖属性。

2)

定义 2 个内容控制模板,类似于这里使用的模板:

https://social.technet.microsoft.com/wiki/contents/articles/28597.aspx

将它们放在单独的资源字典中并给它们相同的键。

合并到 application.current.resources 适当的资源字典和样式。

看到这是一个应用程序设置,这大概是一个启动的事情。人们不只是动态地改变他们的“惯用手”。因此,您可能可以将它们用作静态资源。如果它们实际上会在运行时发生变化,那么我认为这会涉及更多,因为您需要强制重新渲染视图。

【讨论】:

    【解决方案2】:

    正如@RajN 所说,2 模板可能是正确且时尚的解决方案。

    您也可以定义一个有 2 列的网格并相应地切换每个控件的属性“Grid.Column”

    【讨论】:

      【解决方案3】:

      也许不是最好的方法,但我设法根据您的建议使用网格来实现这一点。谢谢大家的宝贵意见。

      我切换了列并相应地更改了宽度。

              if (AppSettings.IsLeft)
              {
                  parentGrid.ColumnDefinitions[0].Width = new GridLength(400, GridUnitType.Pixel);
                  parentGrid.ColumnDefinitions[1].Width = new GridLength(1, GridUnitType.Star);
      
                  Grid.SetColumn(buttonGrid,0);
                  Grid.SetRow(buttonGrid,0);
      
                  Grid.SetColumn(contentGrid,1);
                  Grid.SetRow(contentGrid,0);
              }
      

      【讨论】:

        猜你喜欢
        • 2020-08-19
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        • 2020-09-20
        • 2013-06-05
        • 1970-01-01
        相关资源
        最近更新 更多