2012-11-14 43 views
1

我想创建一个CustomWindow类,其行为如下: 1.窗口的非客户区也被使用,TabControl的选项卡存在而不是像Google Chrome那样的窗口标题。 2.选项卡右侧填充,所以当窗口太小时,最小/最大/关闭按钮不会与选项卡发生冲突 - 这应该可以在TabControl模板中执行。 3. Google Chrome中的标签非常类似于“新标签”按钮。同样,这应该可以通过自定义的TabControl实现并创建一个假小孩来进行渲染。 4.我的类继承自Window类,而且如果TabControl.ItemsSource绑定到Window.Children,则子集合中的每个子集都映射到TabControl选项卡。 5.窗口暴露属性ItemsSource,其行为也像儿童收藏一样。 6.窗口提供了一种将TabControl识别为ItemTemplate的方式。当我输入CustomWindow.ItemsSource = new string[] { "a", "b", "c" };这样的窗口并为项目填充模板时,将在CustomWindow类中选项卡标题样式被硬编码的位置创建三个选项卡,并且选项卡项内容区域由用户模板化。Wpf自定义窗口类似TabControl的模板

正如您所看到的,这基本上是谷歌Chrome窗口的大纲,正是我想要完成的。我知道如何按照我想要的方式弯曲窗口的镶边,例如系统菜单,双击最大化等。但我不知道如何从Window中创建继承的类,它将强制它只有子类是我选择的TabControl(标签标题是样式化的),但实际上它的子集合是TabControls子集合。我对WPF的经验并不像我想的那么多,我想以正确的方式开始,所以我不需要在将来重写它。

另外,当这个问题解决后,我想让用户告诉它是固定的选项卡,我认为最好通过在CustomWindow中定义一个附加属性来完成,类似于任何子控件的CustomWindow.IsPinned。

谢谢。

回答

1

添加一个DependencyProperty的ItemsSource到你的窗口(IEnumerable<object>类型和设置的tabcontrol与ItemsSource="{TemplateBinding ItemsSource}"你的窗口模板。这将使窗口有自己的子集,然后将呈现为在TabControl的标签项目。

+0

好了,但如果我想是这样的: <铬:CustomWindow> 如何使一个集合O此工作f控件?谢谢你的回答,寿! – alexc

+0

我不明白你的问题。如果您将标签定义为简单标签,标签项目包含什么?另一方面,你可以使用'ContentPropertyAttribute'定义什么是你的控件的内容属性http://msdn.microsoft.com/en-us/library/system.windows.markup.contentpropertyattribute(v=vs.100) .aspx –

+0

在这种情况下,标签应该是每个标签项的内容,并且标头将为空。标签标题将通过其他机制 - 我正在考虑像ComboBox的SelectedValuePath。感谢您的帮助,非常感谢。 – alexc