将 ContentControl *放在 * WPF DataTemplate 中? [英] Putting a ContentControl *inside* a WPF DataTemplate?
本文介绍了将 ContentControl *放在 * WPF DataTemplate 中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个名为 SpecialExpander
的自定义扩展器控件.它基本上只是一个标准的 Expander
,带有一个花哨的标题和几个属性(HeaderText
和 IsMarkedRead
).
我从创建一个简单的类开始:
public class SpecialExpander : 扩展器{公共字符串 HeaderText { 获取;放;}public bool IsMarkedRead { get;放;}}
然后我创建了一个样式,在扩展器上设置几个属性(例如边距、填充等),重要的是,它还为 HeaderTemplate<定义了一个自定义的
DataTemplate
/代码> 属性.模板基本上是一个有两行的网格.
如下图所示...
- 对于第一行,我想要一个固定的布局(它总是
TextBlock
TextBlock
CheckBox
) - 然而,对于底行,我希望能够为每个扩展器提供自定义 XAML.
我尝试将 <ContentControl Grid.Row="1" .../>
放在 DataTemplate
中,但我不知道如何挂钩正确地进行.
问题
如何为我的 SpecialExpander
构建一个 DataTemplate
,以便标题具有一些固定内容(顶行)和自定义内容的占位符(底行)?
对于第二个插图,我希望能够做这样的事情:
<SpecialExpander.Header><StackPanel Orientation="水平"><RadioButton Content="High"/><RadioButton Content="Med"/><RadioButton Content="Low"/></StackPanel><SpecialExpander.Header><网格><标签>主要内容在这里</标签></网格></特殊扩展器>
解决方案
今天早上我突然想到如何解决这个问题:我只需要一个普通的 Expander<而不是构建
SpecialExpander
/代码>.然后,对于标题,我将使用一个名为 SpecialExpanderHeader
的自定义 ContentControl
.
这是它的工作原理...
SpecialExpanderHeader 类:
公共类 SpecialExpanderHeader : ContentControl{公共字符串 HeaderText { 获取;放;}public bool IsMarkedRead { get;放;}}
特殊的ExpanderHeader 样式: