ListViewItem 覆盖默认样式中断网格视图

2024-04-17

我想知道是否有人遇到过这种情况。基本上我想做的是覆盖默认的列表视图项以自定义所选的背景/前景。我一切顺利。问题是,我注意到在我实现了网格视图的列表视图上,列被破坏了。我不确定会发生什么来打破这个。我覆盖默认样式的方法是使用混合通过编辑模板副本来获取完整样式。根据需要修改它。应用了它。这几乎就是它看起来的样子。有什么想法吗?

<Style TargetType="{x:Type ListViewItem}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
    <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
    <Setter Property="Padding" Value="2,0,0,0" />
    <Setter Property="Template">
    <Setter.Value>
    <ControlTemplate TargetType="{x:Type ListViewItem}">
        <Border x:Name="Bd"
            Background="{TemplateBinding Background}"
            BorderBrush="{TemplateBinding BorderBrush}"
            BorderThickness="{TemplateBinding BorderThickness}"
            Padding="{TemplateBinding Padding}"
            SnapsToDevicePixels="true">
            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
        </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsSelected" Value="true">
            <Setter TargetName="Bd" Property="BorderBrush" Value="{DynamicResource CustomBorderBrush}" />
            <Setter TargetName="Bd" Property="Background" Value="{DynamicResource CustomBackgroundBrush}" />
            <Setter Property="Foreground" Value="{DynamicResource CustomForegroundBrush}" />
        </Trigger>
    <MultiTrigger>
        <MultiTrigger.Conditions>
            <Condition Property="IsSelected" Value="true" />
            <Condition Property="Selector.IsSelectionActive" Value="false" />
    </MultiTrigger.Conditions>
    <Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
    </MultiTrigger>
    <Trigger Property="IsEnabled" Value="false">
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
    </Trigger>
    </ControlTemplate.Triggers>
    </ControlTemplate>
    </Setter.Value>
    </Setter>
</Style>

<ListView Grid.Row="0" Grid.Column="0" Margin="15,15,0,0" Name="lstResources" SelectionChanged="lstResources_SelectionChanged">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn x:Name="column1"  Header="column1" Width="100" CellTemplate="{StaticResource column1template}"/>
                    <GridViewColumn x:Name="column2" Header="column2" Width="100" CellTemplate="{StaticResource column2template}" />
                    <GridViewColumn x:Name="column3" Header="column3" Width="200" CellTemplate="{StaticResource column3template}" WPFUtility:GridViewColumnResize.Width="*"/>
                </GridView.Columns>
            </GridView>
        </ListView.View>
</ListView>

<DataTemplate x:Key="column1template">
        <DockPanel>
            <TextBlock HorizontalAlignment="stretch" TextTrimming="CharacterEllipsis" >
            <TextBlock.Text>
                <Binding Path="mycontent"/>
            </TextBlock.Text>
            </TextBlock>
        </DockPanel>
    </DataTemplate>

我检查了控制模板ListViews在这两种情况下,得出的结论是样式不适用于GridViews因为他们需要一个GridViewRowPresenter http://msdn.microsoft.com/en-us/library/system.windows.controls.gridviewrowpresenter.aspx正确布局行数据,而不是ContentPresenter.

当然,如果你这样做,你会发现你的正常情况ListViews哪个不使用GridViews不再正确格式化,因为它们需要ContentPresenter.

我并不完全确定解决这个问题的最好方法,但偶然发现了这篇博客文章:http://www.steelyeyedview.com/2010/03/contentpresenter-gridviewrowpresenter.html http://www.steelyeyedview.com/2010/03/contentpresenter-gridviewrowpresenter.html

我将在这里重复一下要点,以防它被删除:

他的解决方案是一个巧妙的小技巧,并且似乎有效。它利用了两位演示者,ContentPresenter默认隐藏(Visibility="Collapsed"),并使用触发器来使ContentPresenter可见,如果GridViewRowPresenter没有内容。自从GridViewRowPresenter没有内容,无论如何也不会显示任何内容。

调整你的Style要包含他的修复,您将得到类似的内容(为了获得焦点而删除了一些代码):

<Style TargetType="{x:Type ListViewItem}">
    <!-- Your Code -->
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
                <Border x:Name="Bd"
                     Background="{TemplateBinding Background}"
                     BorderBrush="{TemplateBinding BorderBrush}"
                     BorderThickness="{TemplateBinding BorderThickness}"
                     Padding="{TemplateBinding Padding}"
                     SnapsToDevicePixels="true">
                    <Grid>
                        <GridViewRowPresenter x:Name="gridrowPresenter"
                            Content="{TemplateBinding Property=ContentControl.Content}" />
                        <ContentPresenter x:Name="contentPresenter"
                            Content="{TemplateBinding Property=ContentControl.Content}"  Visibility="Collapsed" />
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="GridView.ColumnCollection" Value="{x:Null}">
                        <Setter TargetName="contentPresenter" Property="Visibility" Value="Visible"/>
                    </Trigger>
                    <!-- Your Code -->
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ListViewItem 覆盖默认样式中断网格视图 的相关文章

  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 如何将 WPF 窗口置于前面?

    我创建了一个单实例应用程序 并且希望在用户多次启动该应用程序时激活已打开的窗口 这工作正常 但我有一个问题 如果已经打开的窗口超出了另一个应用程序窗口 我必须将其放在前面 我尝试过 window Focus 和 window Show 但它
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • OxyPlot WPF 不适用于按钮单击

    我在使用 OxyPlot 时遇到了一些问题 但无法通过他们的文档或其他搜索来解决 我正在开发一个 wpf 应用程序 它允许用户通过按钮单击事件打开 csv 然后执行一些数学运算并报告一些有用的信息 我想绘制一些生成的数据 因此使用 OxyP
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐

  • 如何在开始日期的时间戳中添加秒数,以便获得估计的结束日期?

    我有一个带有 start time 和估计时间 以秒为单位 的任务对象 start time 以 MYSQL DATETIME 形式存储在数据库中 估计时间以秒形式存储 我想将秒数添加到 start time 以获得估计的完成日期 内维尔提
  • 安全地存储访问令牌

    我应该采取哪些安全措施来确保 如果我的数据库受到损害 长寿命访问令牌不会被盗 长寿命访问令牌与特定服务的用户名和密码一样好 但从与其他人的交谈看来 大多数人 包括我自己 都以纯文本形式存储访问令牌 这似乎与以纯文本形式存储密码一样糟糕 显然
  • 我的 QFileSystemModel 在 PyQt 中无法按预期工作

    EDIT2 model hasChildren parentIndex 回报True but model rowCount parentIndex 回报0 QFileSystemModel 只是 PyQt 中的 fubar 吗 EDIT 经
  • 使用 MQL5 将 OHLC 值从 Python API 集成到 MT5

    我已经从 iqoption 获得了 OHLC 值 并试图找到一种将其与 MT5 一起使用的方法 这是我获取这些值的方法 import time from iqoptionapi stable api import IQ Option I w
  • SSRS 可以根据导出类型切换标题可见性吗? 2008-R2

    我熟悉基于变量或参数值动态显示 隐藏其他报表对象 文本框 tablix 列等 但有没有办法用标题来做到这一点 我在标题对象上没有看到任何 可见性 选项卡来设置表达式 此外 有没有办法根据导出样式隐藏标题 例如 我想在导出到 PDF 时显示标
  • 在 Haskell 中的列表上编写递归函数

    我有以下问题 定义函数 and or Bool gt Bool 它给出了布尔值列表的合取和析取 例如 and False True False or False True True 在空列表上and gives True and or gi
  • 使用 CSS Mix-Blend-Modes 进行隔离:如何防止元素与父元素混合

    我已经尝试了很多不同的方法 但无法使 pink 和 green div 相互混合 但不能使父元素 wrapper 的背景颜色混合 wrapper background color blue height 100vh width 100 is
  • Python中的三角波形状数组

    生成 100 个数字组成的数组 形成下面三角波的形状 最大 最小幅度为 0 5 的最有效方法是什么 记住三角波形 生成三角波的最简单方法是使用 signal sawtooth 请注意 signal sawtooth phi width 接受
  • 如何将数据传回 Ionic 2 中的根页面?

    我有一个 Ionic 2 应用程序 该应用程序的前提是上课 一旦课程被打开 用户就会被标记为在远程 API 中学习该课程 数据流向为 用户打开 课程 选项卡 应用程序从 API 请求 类 数据 每个类别都拥有该用户的 状态 用户选择一个类别
  • UITableView 分隔符样式“单线蚀刻”无法正常工作

    我的代码中有一个分组的 UITableView 并且正在尝试使单线蚀刻样式正常工作 其底部有 1px 白色阴影 相反 当我启用它时 我会在顶部看到一种负灰色阴影 编程实现和 IB 实现都不会产生 1 px 阴影 以下是带有负灰色阴影的屏幕截
  • macOS 上的 Bash - 获取给定年份每个星期六的日期列表

    In bash on macOS 我想写一个小脚本dates 或任何其他可以做的程序 它给我一个格式的日期列表yyyymmdd给定年份的每个星期六并将其保存到变量中 例如 如果我想要 1850 年所有星期六的日期列表 它应该看起来像这样 v
  • 通过 REST API 将对象添加到 Firebase 时如何设置我们自己的 Key

    我使用以下方法将对象添加到 Firebase 数据库 url https myfb firebaseio com api types ty packs json ch curl init curl setopt ch CURLOPT URL
  • 懒惰的 juxt 函数有什么优点吗?

    在回答中一个问题 https stackoverflow com questions 10044254 is there a reverse map function关于一个使用相同参数映射多个函数的函数 A juxt 我想出了一个基本上采
  • 在 C++ 中处理字符串时如何使用 memset? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我有Python背景 最近在学习C 我正在学习一个名为的 C C 函数memset并遵循网站上的在线示例https www gee
  • 将对象的 ArrayList 传递给新的 Activity

    我有一个对象的 ArrayList IEArrayList
  • 即使没有任何更改,“转换为最新的 Swift 语法”也会破坏构建

    我的项目是用 Objective C 编写的 只有一个 swift 中的 tableviewcontroller 我今天下载了 Xcode beta 它提示我 转换为最新的 Swift 语法 当我按照步骤操作后 它显示没有任何变化 我也没有
  • Android-从前置摄像头拍照会旋转照片

    我正在 Android 中创建一个应用程序 用户只能在纵向模式下从前置摄像头拍照 我已经将相机视图固定为纵向 但拍照时它看起来是旋转的 最糟糕的是 不同手机的旋转方向不同 在一部手机中向右旋转 而在另一部手机中则向左旋转 这是我的代码片段
  • 在 Maven 中使用 maven-surefire-plugin 传递系统变量

    我想为 Maven 构建传递一些系统变量 如果我使用mvn clean install Dfirst variable value Dsecond variable second value一切安好 但这个配置在pom xml不起作用
  • 安排行动断言替代方案

    一般问题是单元测试是否有 AAA 的替代模式 如果是的话 看到一些例子并了解它们的优点和缺点将会非常有趣 作为 AAA 测试的最简单示例 在 C 中 为了简单起见 使用 var Arranging var annualSalary 1200
  • ListViewItem 覆盖默认样式中断网格视图

    我想知道是否有人遇到过这种情况 基本上我想做的是覆盖默认的列表视图项以自定义所选的背景 前景 我一切顺利 问题是 我注意到在我实现了网格视图的列表视图上 列被破坏了 我不确定会发生什么来打破这个 我覆盖默认样式的方法是使用混合通过编辑模板副