将 ContentControl *放在 * WPF DataTemplate 中? [英] Putting a ContentControl *inside* a WPF DataTemplate?

查看:36
本文介绍了将 ContentControl *放在 * WPF DataTemplate 中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为 SpecialExpander 的自定义扩展器控件.它基本上只是一个标准的 Expander,带有一个花哨的标题和几个属性(HeaderTextIsMarkedRead).

我从创建一个简单的类开始:

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 样式: