我想创建一个行为如此的CustomWindow
类:
1.也使用窗口的非客户区域,TabControl的选项卡而不是谷歌浏览器中的窗口标题。
2.选项卡是右边填充的,因此当窗口太小时,最小/最大/关闭按钮不会与标签碰撞 - 这应该在TabControl模板中可行。
3.标签后面有一个按钮,就像Google Chrome中的“新标签”按钮一样。同样,这应该可以使用TabControl的自定义实现并创建一个假孩子进行渲染我猜。
4.我的类继承自Window类,并且子集合中的每个子节点都映射到TabControl选项卡,就像TabControl.ItemsSource绑定到Window.Children一样。
5.窗口公开属性ItemsSource,其行为类似于儿童集合。
6. Window提供了一种方式来设置TabControl识别为ItemTemplate的样式。当我像CustomWindow.ItemsSource = new string[] { "a", "b", "c" };
那样提供窗口并填充项目模板时,将创建三个选项卡,其中选项卡标题样式在CustomWindow类中进行硬编码,标签项内容区域由用户模板化。
正如您所看到的,这基本上是Google Chrome窗口的大纲,这正是我想要完成的。我知道如何以我想要的方式弯曲窗口的chrome,如系统菜单,双击最大化等处理。但是我不知道如何从Window中创建继承类,它将强制它唯一的子项成为我选择的TabControl(标签标题被设置样式)但实际上它的子集合将是TabControls子集合。我对WPF的体验并不像我想的那么多,我想以正确的方式开始,所以我不需要在将来重写它。
另外,当这个问题得到解决时,我想让用户告诉它固定的标签,我想最好通过在CustomWindow中定义一个附加属性来实现,比如CustomWindow.IsPinned用于任何子控件?
谢谢。
答案 0 :(得分:1)
将DependencyProperty ItemsSource添加到您的窗口(类型为IEnumerable<object>
)并在您的窗口中使用ItemsSource="{TemplateBinding ItemsSource}"
设置tabcontrol。这将使窗口拥有自己的子集合,然后将其呈现为tabcontrol中的选项卡项。