动态切换 WPF UI 控件

Switch WPF UI controls dynamically

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

Figure 1

根据配置设置(无论用户是惯用左手还是惯用右手),我需要切换控件,向左切换按钮,向右切换标签和文本块。

Figure 2

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

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

您还可以定义一个包含 2 列的网格,并相应地切换每个控件的 属性 'Grid.Column'

取决于应用程序可能的范围。

2 个备选方案:

1)

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

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

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

用户控件中有一个内容展示器,因此您可以放置​​任何您喜欢的控件(例如按钮)"in"它并为标签设置依赖项属性。

2)

定义 2 个与本文中使用的相似的内容控制模板:

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

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

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

鉴于这是一个应用程序设置,这大概是一个启动的东西。人们不只是动态地改变他们的"handedness"。所以你可以将它们用作静态资源。如果它们实际上要在 运行 时间更改,那么我认为这会涉及更多,因为您需要强制重新渲染视图。

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

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

        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);
        }