【问题标题】:best practice for rendering a set of controls in WPF?在 WPF 中呈现一组控件的最佳实践?
【发布时间】:2010-07-21 06:26:42
【问题描述】:

我正在创建一个布局类似于 Microsoft Outlook 的 WPF 应用程序,其中左侧有一些导航按钮,右侧有一个显示内容的网格。我希望这个内容区域(它只是一个网格,分成特定宽度的左侧,然后是右侧的 Width="*")根据左侧的选定项目进行更改。当项目在左侧发生变化时,它将呈现一组不同的标签和按钮等。我很好奇在表单右侧呈现内容的最佳方式是什么,具体来说:

  • 使用 Canvas 控件,并在其上放置控件并在所选项目更改时“交换”Canvas 控件?
  • 创建某种用户控件来交换此区域中的内容?

我意识到这个问题是主观的,但我正在寻找更有经验的开发人员关于他们通常如何处理此类工作的反馈。

编辑:右侧需要为每个选定的项目呈现特定的 UI - 换句话说,右侧的 UI 是为左侧选定的项目自定义的。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您能否使用带有左侧选项卡的 TabControl,然后设置选项卡标题的样式以使其看起来像非选项卡?它需要是带有拆分的网格视图吗?

    【讨论】:

    • 好吧,我觉得自己像个白痴。我想,事实上,效果会好得多。我必须弄清楚标签页眉的样式。很高兴在我在 UI 上投入太多时间之前问过。再次感谢。
    【解决方案2】:

    您可能在这里寻找的是数据模板。如果您的右侧窗格是ContentControl,您可以将内容绑定到左侧的选定项目。然后,您可以为左侧列表中的每种对象类型定义数据模板。

    几乎不需要使用代码在 WPF 中交换内容 - 这就是 DataTemplate 行为的设计目的。

    【讨论】:

    • 我之前使用过 DataTemplate 来渲染一组对象(例如,我有一个“Employee”对象,它实现了 INotifyPropertyChanged 并定义了一个 DataTemplate,它有一堆 TextBlocks 作为名称,即填充了一个列表框。)然而,为此,右侧窗格只是网格的另一半,每次所选项目更改时都需要显示一组完全不同的控件。因此,如果左侧的所选项目是“提醒”,则右侧将为此呈现 UI,如果所选项目是“呼叫”,则右侧将为此呈现 UI,等等。
    • 如果您的左侧列表绑定到任意对象的集合(例如myRemindersModelmyCallsModel 等),那么您可以使用与您完全相同的机制来渲染右侧为您的 Employee 对象做了。
    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2011-01-18
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多