Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中创建可重用的接口元素_C#_Wpf_User Interface - Fatal编程技术网

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

C# 在WPF中创建可重用的接口元素,c#,wpf,user-interface,C#,Wpf,User Interface,我正在用C#开发一个WPF应用程序,并考虑在不同的窗口中实现一个自定义UI元素 我想有一个最小化托盘(只有约4倍可见),在点击托盘旁边的图标后展开。扩展版本将显示所有控件,并在我再次单击图标时最小化。我创建了一个快速HTML来澄清问题 我知道我可以在我的应用程序中放置一个stackpanel和按钮,并在单击按钮时使它们都向上移动,但是我需要大量复制代码 虽然我对C#很有经验,但我对WPF界面开发/模板还是相当陌生,但我确信一定有一种方法可以让我在应用程序中使用该UI元素,而无需在表单类文件中复制

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

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

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

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


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

使用Expander控件怎么样?

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

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

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

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

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

您的案例可以使用
弹出窗口
切换按钮
扩展器
构建

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

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

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