在WPF中创建可重用的接口元素

时间:2011-05-17 20:17:55

标签: c# wpf user-interface

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

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

我知道我可以在我的应用程序中放置一个stackpanel和按钮,当我点击按钮时它们会向上移动,但是我需要复制很多代码。

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

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

3 个答案:

答案 0 :(得分:3)

有三种方法可以自定义元素。

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

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

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

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

决定取决于所需的行为。如果您希望打开的面板在内容下移动,则需要一个扩展器。如果你想要下拉式功能,你需要弹出窗口。

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

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

答案 1 :(得分:2)

如何使用Expander Control?

答案 2 :(得分:0)

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