如何在 WPF 中制作“手风琴小部件”?

2023-11-24

目标:

我正在尝试在 WPF 中实现类似的目标:

Widget with several vertically stacked expanders
(source: wordpress.org)


初步解决方案:

目前,我正在尝试使用ItemsControlItemTemplate由一个组成Expander.

我想要一致的外观Header的一部分Expander,但我想要Content的一部分Expander完全灵活。因此,它基本上是一组垂直堆叠的“portlet”,其中每个 portlet 都有一致的标题栏,但内容不同。


到目前为止的代码:

这就是我现在所拥有的:

<ItemsControl
    Grid.Row="2"
    Grid.Column="2">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Expander>
                <Expander.HeaderTemplate>
                    <DataTemplate>
                        <StackPanel
                            Orientation="Horizontal">
                            <TextBlock
                                FontSize="14"
                                FontWeight="Bold"
                                Text="Title_Of_Expander_Goes_Here" />
                            <TextBlock
                                Margin="10,0,0,0"
                                FontWeight="Bold"
                                FontSize="18"
                                Text="*" />
                        </StackPanel>
                    </DataTemplate>
                </Expander.HeaderTemplate>
                <Expander.Template>
                    <ControlTemplate
                        TargetType="Expander">
                        <Border
                            BorderThickness="1">
                            <ContentPresenter />
                        </Border>
                    </ControlTemplate>
                </Expander.Template>
            </Expander>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.Items>
        <StackPanel>
            <TextBlock
                FontSize="14"
                FontWeight="Bold"
                Text="Users:" />
            <wt:DataGrid
                Margin="0,1,0,0"
                AutoGenerateColumns="False"
                CanUserAddRows="True"
                CanUserDeleteRows="True"
                ItemsSource="{Binding Source={StaticResource Main_SystemUsers}, XPath=//Users/*}">
                <wt:DataGrid.Columns>
                    <wt:DataGridTextColumn
                        Header="User Name"
                        Binding="{Binding XPath=@UserName}" />
                    <wt:DataGridComboBoxColumn
                        Header="Role"
                        ItemsSource="{Binding Source={StaticResource Main_UserRoles}, XPath=//Roles/*}"
                        SelectedValueBinding="{Binding XPath=@Role}" />
                </wt:DataGrid.Columns>
            </wt:DataGrid>
            <StackPanel
                Margin="0,10,0,0"
                Orientation="Horizontal">
                <Button
                    Content="Add New User..." />
                <Button
                    Margin="10,0,0,0"
                    Content="Delete User..." />
            </StackPanel>
        </StackPanel>
    </ItemsControl.Items>
</ItemsControl>

讨论:

当我运行这个时唯一出现的是DataGrid用户及其下方的按钮(“添加新用户”和“删除用户”)。没有Expander或标题栏。另外,即使我确实看到了,我也不知道如何设置Binding对于出现在标题栏上的标题。如果我使用的话我知道如何进行绑定ItemsSource,但我想以声明方式设置我的项目。

问题:

我该怎么办?我正在寻找现有的解决方案或干净的解决方案。

Edit:

我最终做的是更换ItemsControl with a StackPanel只是为我的扩展器编写一种样式。事实证明这要简单得多,而且确实没有任何好处ItemsControl因为无论如何我都需要为每个项目声明自定义内容。剩下的一个问题是如何为每个扩展器实现自定义标题。这就是@Thomas Levesque 建议使用的地方TemplateBinding进来了。我所要做的就是更换Text="Title_Of_Expander_Goes_Here"在我的标题模板中(参见上面的代码)Text="{TemplateBinding Content}".


您没有看到 Expander,因为您重新定义了它的模板。这个应该效果更好:

        ...
        <Expander.Template>
          <ControlTemplate
              TargetType="Expander">
              <Border
                  BorderThickness="1">
                  <Expander Content="{TemplateBinding Content}" Header="{TemplateBinding Header}"/>
              </Border>
          </ControlTemplate>
        </Expander.Template>
        ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 WPF 中制作“手风琴小部件”? 的相关文章

  • WPF 按钮单击事件不起作用

    我有一个按钮 其中包含网格内的图像 我的问题是我无法制作该按钮Click活动工作 我的 XAML 代码
  • 使用引用的 ItemsSource 绑定到 SelectedItem

    Intro 我有一个不同的数据源池 我有口罩 面具有索引线 每个 Indexline 都有一个来自关联池的数据源 Classes public class DataSource public string Name get set publ
  • 网格上的 SharedSizeScope 使表单“跳舞”

    我的页面上有一个 StackPanel 也尝试过使用 Grid
  • 使用拇指移动变换后的控件会产生奇怪的行为

    当尝试使用拇指在画布上移动控件时 我遇到了奇怪的行为 当我将控件添加到画布并使用 Thumb DragDelta 事件来移动它时 一切看起来都很好 但是 当我对控件应用旋转变换时 拖动它是很奇怪的 控件开始围绕光标旋转 角度越大 圆圈越大
  • 处置 StreamResourceInfo.Stream

    I use StreamResourceInfo Stream to get BitmapImage来自资源 是否正确Close and Dispose使用后的流 我问这个问题是因为在内存分析器中 如果这样做我会收到错误 内存分析器表示已处
  • Team Foundation Server 2012 Express BuildTemplate 进程 xaml 文件未打开

    我安装了 Visual Studio 2013 Express 版本 12 0 21005 1REL 并安装了 Team Foundation Server 2012 Express 我需要更改构建过程 xaml 文件 但是当我从源代码管理
  • 使用 TemplateColumns 将 WPF DataGrid 绑定到 DataTable

    我已经尝试了一切但一无所获 所以我希望有人能给我一个顿悟的时刻 我根本无法获得成功提取数据网格中数据的绑定 我有一个包含 MyDataType 的多列的 DataTable public class MyData string nameDa
  • 从模板绑定到 viewmodel 的属性

    我为我的 GameViewModel 创建了一个视图 我有一些像这样的xaml
  • 如何循环访问 WPF StackPanel 静态项目?

    可能很容易 但我很难弄清楚这一点 谷歌似乎也没有多大帮助 如何循环遍历 StackPanel 的静态声明元素 无数据绑定 元素在 xaml 中声明 任何帮助表示赞赏 你的意思是StackPanel的孩子们 foreach var child
  • 控制不同的DataContext

    控制WPF中不同的DataContext 因为我可以在不同的选项卡中部署多个 DataContext 并控制当前的 DataContext 我在用着Mvvm Light WPF4我有不同的 ViewModels View 但我不知道如何处理
  • TargetType="controlType" 和 TargetType="{x:Type controlType}" 之间的区别

    在 WPF 中 您可以设置TargetType类型的名称 或者您可以将其设置为 x Type nameOfType 有谁知道有什么区别 没有什么 由于属性类型是Type XAML 解析器知道尝试将您提供的任何内容转换为Type 在其他情况下
  • WPF 元素宿主内存泄漏

    我在 Windows 窗体上使用元素主机时遇到奇怪的内存泄漏 我有一个主窗体 它打开另一个窗体 该窗体上只有 elementhost 控件 此时 它没有 wpf 控件子控件 只能打开 1 个主机表单 每次我打开窗体时 应用程序内存都会增加2
  • 如何在 RichTextBox 中以编程方式移动插入符位置?

    我有一个 RichTextBox 其中的特殊文本位具有自定义格式 但是 存在一个错误 即插入字符后 插入符号会放置在新插入的字符之前而不是之后 这是因为对于每次编辑 代码都会重新计算内容以应用自定义格式 然后像这样设置 CaretPosit
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • 如何在Wpf中的用户控件中调用MahApps Metro对话框

    当我尝试调用 MahApps Metro 对话框时 我在传递值时遇到错误 在传递参数时调用对话框控制时我需要传递 Metrowindow 参数 但我需要在用户控件中调用它 下面是当我需要对话框控制时我将调用的方法 public async
  • ItemSource 中具有不同类型数据的 ListView 多行列标题

    继续this https stackoverflow com q 26712051 1997232问题 我想实现这种ListView 它应该有两件事 多行列标题 不同的数据类型通过绑定ItemsSource以不同方式显示 为了解决 1 我尝
  • 滚动到 ScrollViewer 末尾的最佳方法

    目前 当我添加新项目时 我让代码自动滚动到末尾的唯一方法如下 XAML
  • 从 xaml 获取 RowIndex

    我有一个带有 DataGridTemplateColumns 的 DataGrid 在 TemplateColumn 中 我使用工作正常的 DataTrigger 它从 DataGrid 父级检索项目计数
  • VisualStateManager 和生成的转换

    正当我以为我明白的时候VisualStateManager 有些事情证明我错了 我正在使用 WPF 4 并且尝试简单地在鼠标悬停时放大某个项目 并在鼠标离开时将其缩小 我想我只需定义每个状态VisualStateGroup然后指定一个Vis
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况

随机推荐

  • JQuery 检测下拉值被选中,即使它没有改变

    使用 JQuery 或 JavaScript 我想检测用户何时选择一个值 即使他们没有更改已选择的值 如何才能做到这一点 我试过 MyID select function my function and MyID change functi
  • 架构设计 - 支持通过移动应用完成 Facebook 登录的 REST API

    我正在尝试设计 REST API 来支持各种移动客户端 iOS 和 Android 应用程序 这些应用程序将允许用户使用 Facebook 登录以及我们自己的电子邮件身份验证进行登录 你可以参考下图来了解我的设计 有两个级别的授权 第一个是
  • '\python.exe' 处没有 python

    不断出现 No Python at C Users python exe 错误 即使我删除了以前的 python 和路径 文件位置也是我安装以前的 python 的位置 我想在 VS code 中使用 python 在 Windows 10
  • iOS 中的应用程序购买收据验证 - 沙箱与生产 url?

    我跟着Ray Wenderlich 的教程在我的应用程序中实现收据验证 该代码直接从我的应用程序连接到 Apple 的验证服务器 而不是通过我自己的服务器 在我向 AppStore 提交第一个二进制文件后 我测试了我的应用程序 但应用程序内
  • 猫头鹰旋转木马无法正常工作,也许我链接的东西不正确?

    我尝试在我的新项目中使用猫头鹰旋转木马 我似乎对此有问题 到目前为止 只有 HTML 和 CSS 可以工作 我不知何故对脚本做了一些错误的事情 有人可以帮我看看并指出我搞砸的正确方向吗 这是该网站的链接 猫头鹰轮播位于网站底部附近 您将看到
  • Java:(new Random()).nextInt(5)总是返回相同的数字吗?

    有时这段代码总是返回相同的数字 有时它工作得很好 new Random nextInt 5 我怀疑问题出在哪里 它可能总是使用相同的种子创建一个新的随机数 那么最好的解决方案是什么 为 Random 创建一个静态变量并 用它来代替 使用 M
  • AVD 管理器不会将我的 HTC Hero 手机检测为虚拟设备

    运行应用程序时 我需要使用手机作为模拟器 目标 虚拟设备 我已安装 HTC Sync 并且 USB 驱动程序正常 我已经在设置中启用了 USB 调试 我还需要做什么才能让 Eclipse AVD Manager 检测我的手机 我按照我现在所
  • 更新 SimpleCursorAdapter 同时保持 ListView 中的滚动位置

    我的问题 每当我通过其 自定义 SimpleCursorAdapter 更新其内容时 我的 ListView 都会将其滚动位置重置到顶部 我希望 ListView 在更新时保持其滚动位置 我首先每次创建一个新的适配器实例并使用ListVie
  • 如何在 JavaFX 控制器中使用 Guice?

    我有一个 JavaFX 应用程序 我想在其中引入 Guice 因为我的代码 现在工厂满了 只是为了测试的目的 我有一个用例 其中我有某个视图的控制器类 这个控制器类有一个视图模型 我通过以下方式将模型传递给视图模型 控制器类的构造函数 在控
  • 使用 Jenkins 在多个环境中按顺序运行作业任务

    我是詹金斯的新手 我正在尝试在单个作业中实现特定场景 以使用 Jenkins 构建移动应用程序 在一项工作中 我想依次启动多个任务 任务 1 Windows gt 任务 2 Windows gt 任务 3 Windows gt 任务 4 M
  • 如何防止数据网格中的行在应用程序运行时闪烁

    在我目前正在开发的应用程序中 我使用 datagridview 来显示数据 要填充它 我必须按一个按钮 后台工作程序将开始运行 它将填充数据表 当它完成运行时 它将使用数据表作为数据网格的数据源 这工作正常 用户界面保持响应等等 但现在我已
  • python 内存不足错误的解决方法有哪些?

    我正在将 x y z 点文件 LAS 读入 python 中 并遇到内存错误 我正在为我正在从事的项目在已知点之间插入未知点 我开始处理小文件 50 000 000 点 现在我的代码因内存错误而失败 处理如此大量的数据有哪些选择 我不必立即
  • 为模式匹配搜索索引 jsonb 数据

    这是以下内容的后续内容 jsonb 键 值的模式匹配 我有一张表如下 CREATE TABLE PreStage transaction transaction id serial NOT NULL transaction jsonb CO
  • 如何将 Map 编码为 Base64 字符串?

    我喜欢将 java 字符串映射编码为单个 Base 64 编码字符串 编码后的字符串将被传输到远程端点 并且可能被不怀好意的人操纵 因此 最糟糕的情况应该是无效的键 值元组 但不应带来任何其他安全风险 Example Map
  • 如何查看哪些插件导致 Vim 变慢?

    有没有办法分析 Vim 插件 当我打开一个大文件时 我的 MacVim 变得越来越慢 py 我知道我可以取消选择所有插件并逐一重新选择以检查哪个插件是罪魁祸首 但是有没有更快的方法 我的 dotvim 在这里 https github co
  • Firefox new Date() 从字符串构造本地时区的时间

    我正在尝试从字符串创建日期对象 我得到 ISO 格式的日期 除了毫秒部分 例如 2012 01 30T16 23 12 当我在 IE Chrome 和 Firefox 中运行以下代码时 结果有所不同 链接到小提琴 currentDate 2
  • PHP - 创建缩略图并保持纵横比

    编辑 这可以在 CSS 中轻松完成 在撰写本文时我对 CSS 不太了解 我使用 PHP 创建了一个缩略图创建器 生成的缩略图应具有相同的大小 但问题是使用上传具有不同纵横比的图像 例如横向或纵向 缩略图会变得难看 所以我创建了上面的图片来进
  • 向 extjs 网格添加工具提示以显示有关该行的完整信息

    I had a gridview 它附加了一个具有一些字段的模型 但在我的网格中 我只显示一个字段 我想要的是当我的鼠标悬停到网格行时 tooltip将出现并显示其他字段值 我怎样才能做到这一点 有人做过这个吗 我应该创建什么网格事件too
  • 其他流的笛卡尔积的流,每个元素作为一个列表?

    如何使用 Java 8 实现一个函数来获取一定数量的流 并生成一个流 其中每个元素都是一个由流的笛卡尔积的一个成员组成的列表 我看过这个问题 这个问题使用了一个聚合器 它是BinaryOperator 取出两个相似类型的物品并生产一个相同类
  • 如何在 WPF 中制作“手风琴小部件”?

    目标 我正在尝试在 WPF 中实现类似的目标 source wordpress org 初步解决方案 目前 我正在尝试使用ItemsControl与ItemTemplate由一个组成Expander 我想要一致的外观Header的一部分Ex