【问题标题】:Should I be using a WPF user control? Or just a Grid?我应该使用 WPF 用户控件吗?还是只是一个网格?
【发布时间】:2012-06-30 09:08:28
【问题描述】:

所以我有一个分为两部分的应用程序 - 左侧是自定义菜单,右侧是包含所有“内容”(不同屏幕)的网格。

看起来像这样:

另外,当点击不同的按钮时,左边的菜单会被不同的按钮填满(例如,如果你点击查看按钮,菜单会变成类似的东西):

Start Date
End Date

Employee
Project
...

我很确定我希望每个屏幕(在右侧)成为它们自己的用户控件。

但我的问题是:每个菜单都应该是用户控件吗?这使得使用它们有点困难。然后我不得不担心有 getter/setter,以便主窗口可以监听菜单按钮等。

另一种选择是以编程方式在 mainWindow 中添加按钮,这样我就可以在 mainWindow.cs 中添加侦听器(到网格中)

哪种方法更好?还是有其他方法更受欢迎?

【问题讨论】:

  • WPF 主要用于 Grid 和 Canvas。

标签: c# wpf user-controls menu grid


【解决方案1】:

整个窗口都可以通过Grid 轻松完成。

左侧可以通过您的按钮仅持有StackPanel 或其他布局控件。

您可以使用ContentPresenter 来保存右侧的内容。当您触发按钮时,只需更改绑定的内容,它将使用您相应的用户控件进行更新。

【讨论】:

  • 听起来很有趣。所以你是说我不应该为每个屏幕都有一个单独的文件?但这不意味着我的 MainWindow.cs/xaml 文件将是 huuuuge 吗?
  • @Toadums 否 - 每个“屏幕”可以有一个单独的 UserControl - ContentPresenter 可以在运行时交换内容。
  • 哦,好的。我知道了!!所以可以只在 c# 代码中定义按钮,从堆栈面板中添加/删除它们吗?
  • @Toadums 如果您需要 - 尽管我倾向于尝试做一些更优雅的事情。您不能只在 xaml 中定义它们吗?
  • 我可以,我可以将它们分别放在自己的面板/堆栈面板中,然后当按下按钮时,我会更改菜单中显示的面板。这是更好的方法吗?? (运行前我知道所有的按钮)
【解决方案2】:

我认为您可以像 Reed 所说的那样使用网格来实现。但是,如果您需要在其他地方重用它,我认为您应该使用单独的 UserControl。

【讨论】:

    【解决方案3】:

    也许我误解了你,但我会使用 TabControlTabStripPlacement="Left"

    如果您需要在左侧有额外的空间来显示其他内容,您可以覆盖默认的 TabControl 的ControlTemplate,并在ControlTemplate 内的TabPanel 中添加一堆边距空间。或者,您可以让TabItem 的标题在选中时与未选中时显示不同。

    【讨论】:

      猜你喜欢
      • 2011-06-28
      • 2019-08-28
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 2011-05-07
      • 1970-01-01
      相关资源
      最近更新 更多