我想创建一个CustomWindow
以这种方式运行的类: 1. 也利用了窗口的非客户区,出现了 TabControl 的选项卡,而不是像 Google Chrome 中的窗口标题。2. 选项卡是靠右填充的,所以当窗口太小时,最小/最大/关闭按钮不会与选项卡发生冲突——这在 TabControl 模板中应该是可行的。3.标签后面有一个按钮,很像谷歌浏览器中的“新标签”按钮。同样,这应该可以通过 TabControl 的自定义实现来实现,并创建一个假的孩子来渲染我猜。4. 我的类继承自 Window 类,并且 children 集合中的每个子项都映射到 TabControl 选项卡,就像 TabControl.ItemsSource 绑定到 Window.Children 一样。5. Window 暴露了 ItemsSource 属性,其行为也类似于子集合。6. Window 提供了一种方法来设置 TabControl 识别为 ItemTemplate 的样式。CustomWindow.ItemsSource = new string[] { "a", "b", "c" };
我为项目填充模板,将创建三个选项卡,其中选项卡标题样式在 CustomWindow 类中硬编码,选项卡项目内容区域由用户模板化。
正如你所看到的,这基本上是谷歌浏览器窗口的轮廓,这正是我想要完成的。我知道如何以我想要的方式弯曲窗口的镶边,处理系统菜单、双击最大化等。但是我不知道如何从 Window 继承类,这将迫使它是唯一的孩子成为我选择的 TabControl(标签标题是样式的),但实际上它的子集合将是 TabControls 子集合。我对 WPF 的经验没有我想的那么丰富,我想以正确的方式开始,所以我以后不需要重写它。
另外,当这个问题得到解决时,我想给用户一种方法来告诉它被固定的选项卡,我猜这最好通过在 CustomWindow 中定义一个附加属性来完成,比如 CustomWindow.IsPinned 用于任何子控件?
谢谢你。