【问题标题】:Creating a reusable interface element in WPF在 WPF 中创建可重用的界面元素
【发布时间】:2011-08-27 13:15:51
【问题描述】:

我正在使用 C# 开发 WPF 应用程序,并且正在考虑在各种窗口中实现自定义 UI 元素。

我想要一个最小化的托盘(只有大约 4px 可见),在单击托盘旁边的图标后会展开。扩展版本将显示所有控件,并在我再次单击该图标时最小化。我创建了一个快速 HTML concept 来澄清事情。

我知道我可以在我的应用程序中放置一个堆栈面板和按钮,并在我单击按钮时让它们都向上移动,但是我需要大量复制代码。

虽然我有 C# 方面的经验,但我对 WPF 界面开发/模板还很陌生,但我确信必须有一种方法可以在我的应用程序中使用该 UI 元素而无需复制/粘贴我的表单类文件中有很多行代码。

我希望有人可以帮助我,或者至少为我指明正确的方向。

【问题讨论】:

    标签: c# wpf user-interface


    【解决方案1】:

    可以通过三种方式自定义元素。

    1如果您只需要视觉修改,您可以使用styles 来更改.net 默认控件的外观。您甚至可以覆盖/扩展默认模板。

    2如果您想在控件中自定义逻辑,您可以创建一个自定义控件。该框架带来了许多可以构建的“原语”。例如ContentControlHeaderedContentControl。假设您要构建一个自定义扩展器控件,您可以从 HeaderedContentControl 继承您的自定义控件,它为您提供 Header 和 Content 属性,您只需要自己实现切换逻辑。 如果您想构建可在整个应用程序中使用的基本功能,CustomControls 是一个不错的选择。它们也可以根据用例设置主题/样式(参见 1)。

    3如果您想将不同的控件组合成一个控件,您可以创建一个UserControl。用户控件是使用 XAML 组成的。大多数顶级控件是由视图模型驱动的用户控件。

    您的案例可以使用PopupToggleButtonExpander 构建。

    决定取决于期望的行为。如果您希望打开的面板向下移动以下内容,您需要一个扩展器。如果您想要类似下拉菜单的功能,则需要弹出窗口。

    如果您使用弹出窗口,只需将 IsPopupOpen 属性绑定到 ToggleButton 的 IsChecked 并设置 PopupStaysOpen = false 以将按钮连接到您的弹出窗口。

    如果您使用扩展器控件,则应创建一种样式,该样式可应用于应用程序中所有相同的扩展器,以最小化每个视图中所需的 XAML。

    【讨论】:

      【解决方案2】:

      有一个名为 Expander 的控件非常适合此操作。您必须将其设置为您想要的样式,但它具有您想要的内置功能。

      【讨论】:

        【解决方案3】:

        使用 Expander Control 怎么样?

        【讨论】:

          猜你喜欢
          • 2016-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多