将 ContentControl 放入 WPF DataTemplate 中?

2024-02-01

我有一个名为的自定义扩展器控件SpecialExpander。基本上只是一个标准Expander有一个漂亮的标题和几个属性(HeaderText and IsMarkedRead).

我首先创建一个简单的类:

public class SpecialExpander : Expander
{
    public string HeaderText { get; set; }
    public bool IsMarkedRead { get; set; }
}

然后我创建了一个样式,在扩展器上设置几个属性(例如边距、填充等),重要的是,它还定义了一个自定义DataTemplate为了HeaderTemplate财产。该模板基本上是一个有两行的网格。

如下图所示...

  • 对于顶行,我想要一个固定的布局(它总是TextBlock TextBlock CheckBox)
  • 但是,对于底行,我希望能够为每个扩展器提供自定义 XAML。

我尝试把<ContentControl Grid.Row="1" ... /> in the DataTemplate,但我不知道如何正确连接它。


替代文本 http://img85.imageshack.us/img85/1194/contentcontrolwithintem.jpg http://img85.imageshack.us/img85/1194/contentcontrolwithintem.jpg



Question

我怎样才能建立一个DataTemplate for my SpecialExpander以便标题具有一些固定内容(顶行)和自定义内容的占位符(底行)?

对于第二个插图,我希望能够做这样的事情:

<SpecialExpander HeaderText="<Expander Header Text>" IsMarkedRead="True">
    <SpecialExpander.Header>
        <StackPanel Orientation="Horizontal">
            <RadioButton Content="High" />
            <RadioButton Content="Med" />
            <RadioButton Content="Low" />
        </StackPanel>
    <SpecialExpander.Header>
    <Grid>
        <Label>Main Content Goes Here</Label>
    </Grid>
</SpecialExpander>

今天早上我想到了如何解决这个问题:而不是建立一个SpecialExpander,我只需要一个正常的Expander。然后,对于标题,我将使用自定义ContentControl called SpecialExpanderHeader.

这是它的工作原理...

SpecialExpanderHeader 类:

public class SpecialExpanderHeader : ContentControl
{
    public string HeaderText { get; set; }
    public bool IsMarkedRead { get; set; }
}

SpecialExpander标题样式:

<Style TargetType="custom:SpecialExpanderHeader">
    <Setter Property="Padding" Value="10" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="custom:SpecialExpanderHeader">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="5" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <StackPanel Grid.Row="0" Orientation="Horizontal">
                        <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=custom:SpecialExpanderHeader}, Path=HeaderText}" />
                        <CheckBox Margin="100,0,0,0" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=custom:SpecialExpanderHeader}, Path=IsMarkedRead}" />
                    </StackPanel>
                    <Separator Grid.Row="1" />
                    <ContentPresenter Grid.Row="2" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

扩展器样式

<Style x:Key="Local_ExpanderStyle" TargetType="Expander" BasedOn="{StaticResource {x:Type Expander}}">
    <Setter Property="Margin" Value="0,0,0,10" />
    <Setter Property="Padding" Value="10" />
    <Setter Property="FontSize" Value="12" />
</Style>

Usage

<Expander Style="{StaticResource Local_ExpanderStyle}">
    <Expander.Header>
        <custom:SpecialExpanderHeader IsMarkedRead="True" HeaderText="Test">
            <StackPanel Orientation="Horizontal">
                <RadioButton Content="High" />
                <RadioButton Content="Medium" />
                <RadioButton Content="Low" />
            </StackPanel>
        </custom:SpecialExpanderHeader>
    </Expander.Header>
    <Grid>
        <!-- main expander content goes here -->
    </Grid>
</Expander>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 ContentControl 放入 WPF DataTemplate 中? 的相关文章

  • 更改 WPF 应用程序清单?

    我已经发布给微软的评论 http connect microsoft com VisualStudio feedback ViewFeedback aspx FeedbackID 420920WPF 中的对话框未启用 VisualStyle
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • Outlook 日历 .Net Core Web API GetList(tokenCredential 参数不能为空。(参数 'tokenCredential'))

    我有一个与 Outlook 日历集成相关的 API 项目 通过此项目 您可以访问您的 Outlook 帐户 我想在访问日历部分后列出所有事件 我看了你的文字记录 但有些地方我不明白 我怎样才能得到这个列表 这份文件但我不明白 appsett
  • 测试周围的非零元素

    这是以下内容的以下部分 2 附加问题 获得非零邻居的平均值后 我还想测试邻居元素是否等于 小于或大于非零的平均值 如果它大于或等于 1 否则为 0 注 如果邻居在两个或多个中心的半径内 则取最小的中心平均值进行测试 0 12 9 4 9 1
  • 为什么我不断收到位置参数错误?

    有人可以向我解释一下为什么我不断收到此错误 TypeError get n nouns takes 1 positional argument but 2 were given 我已经通过查看类似的问题了解了我的问题可能出在哪里 Link
  • 如何获取结构“Elf64_Rela”中的符号名称

    include
  • JDBC CallableStatement 和 Oracle SYS_REFCURSOR IN 参数?

    和标题中说的差不多 到底该怎么做呢 基本上我需要将空 空 引用游标作为 IN 参数传递给存储过程 spring s PreparedStatementSetter setValues public void setValues Prepar
  • 在 phpstorm 中配置 css 自动完成

    使用 PHPStorm 3 0 有没有办法控制 css 文件中的自动完成功能 我已禁用 首选项 gt 编辑器 gt 代码完成 中的所有内容 但我仍然观察到以下行为 假设我会尝试输入 list 当输入 list 并按空格键添加 括号时 PHP
  • Android:在 SearchView 中输入文本时防止弹出文本字段

    你好 Android 开发者 我的 Android 系统有问题搜索视图 http developer android com reference android widget SearchView html小部件 我想做的是将 实时 文本过
  • 无法通过 API 访问 Sitecore 项目字段

    我已向现有数据模板添加了一个包含几个新字段的新部分 当以普通用户帐户登录时 这些字段会正确显示 但是 当使用 API 访问字段时 item Fields FieldName 始终返回 NULL 我尝试过的事情 发布项目和相应的数据模板 授予
  • 我可以使用 ADFS 2.0 针对 SQL Server 对某些用户进行身份验证吗?

    我一直在使用 ADFS 对 AD 中的用户进行身份验证 并使用 VS 中的声明感知模板 我们的一些用户不会在 Active Directory 中 因此我想知道是否可以配置 ADFS 来查找这些用户的 SQL Server 然后正常进行 A
  • presentPopoverFromRect 在 iOS8 beta 中不显示弹出框

    我正在将 iOS7 1 iPad 应用程序迁移到 iOS8 我刚刚下载了 Xcode 6 Beta 并在模拟器上运行了该应用程序 我注意到的第一件事是在 iOS7 1 中运行良好的弹出窗口不再工作了 我创建弹出窗口的方式是 the popo
  • Redshift 上的数字无效

    我正在尝试将一些数据从阶段加载到关系环境 但发生了一些我无法弄清楚的事情 我正在尝试运行以下查询 SELECT CAST SPLIT PART some field 2 AS BIGINT cmt par FROM public some
  • VisualVM 无​​法采样内存

    我有一个配置了 JMXRemote 参数的 tomcat 实例 本地 VisualVM 能够在 CPU 上获取采样器 但不能在内存上获取采样器 内存按钮呈灰色 并显示一条摘要 内存采样 不可用 无法连接到目标应用程序 确保应用程序在支持的
  • Eclipse 代码格式化

    我有一些混合了 JavaScript HTML 和 twig 标记的 twig 文件 有没有办法使用 Eclipse 来 hi lite 一段代码并将其格式化为 JavaScript 然后 hi lite 另一部分并将其格式化为 HTML
  • Java - 为什么重写的方法被调用两次(或者至少看起来是这样)?

    下面有这个输出 Hello World main ConstructedDerivedClass 6 0 main ConstructedDerivedClass 6 0 public class ConstructedDerivedCla
  • 部署任何 Google Action 时突然出错

    更改后 从 开发 选项卡切换到 测试 选项卡时 我的所有操作都会出错 还有几天前工作的模型 看到之后 我尝试了另一个没有任何更改的项目 并且抛出了相同的错误 有人知道发生了什么事吗 该错误不提供信息 谷歌支持团队回答了我 问题出在 Chro
  • Django 管理员不会加载某些静态文件

    我在几个 django 项目中遇到了一个奇怪的问题 我正在尝试解决它 由于某种原因 管理区域的所有静态文件都正确加载 包括 js css 和图像 但侧导航栏的 2 个文件 与其他所有文件一起位于我的静态目录中 无法加载 这些文件是 nav
  • Julia 中的“==”和“===”比较运算符有什么区别?

    有什么区别 and Julia 中的比较运算符 ChrisRackauckas 的答案就其本身而言是准确的 即对于可变对象 然而 这个问题的含义远不止于此 所以我将在这里详细说明一下 The 运算符 的别名is函数 实现 Henry Bak
  • 线程“main”中的异常 java.lang.NoSuchFieldError:Factory

    最近将 POI jar 版本从 3 17 升级到 5 1 以及在 3 x 中工作的以下代码现在已损坏 jdk 1 8 Below are the set of Jar used 下面是我的存根 import java io File imp
  • 根据 Oracle APEX 4.0 中的项目更改页面标题

    在 Oracle APEX 4 0 中 我有一个客户数据库 我希望将页面标题更改为我选择编辑的客户的名称 我这样输入标题 https i stack imgur com Bo0cy png https i stack imgur com B
  • 将 ContentControl 放入 WPF DataTemplate 中?

    我有一个名为的自定义扩展器控件SpecialExpander 基本上只是一个标准Expander有一个漂亮的标题和几个属性 HeaderText and IsMarkedRead 我首先创建一个简单的类 public class Speci