WPF 覆盖 DataGrid RowHeader 模板并仍然设法选择行

2023-12-07

我已覆盖默认行标题样式以使用我的自定义按钮:

<Style x:Key="RowHeaderStyle" TargetType="DataGridRowHeader">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridRowHeader">
                <Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Style="{StaticResource RowHeaderButton}" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

当然,问题是单击按钮不再选择该行。我是否必须在 IsPressed 事件上调用自定义方法?我如何知道行索引?你会怎样做呢?

Thanks!


我最终只使用了样式,事实证明,如果不是太激烈的话,你可能可以做你想做的事。如果有人设法获取后面的代码来处理 DataGridHeaderBorder 上的行选择,请告诉我! 例子:

<...xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"...>

<BooleanToVisibilityConverter x:Key="bool2VisibilityConverter"/>

<LinearGradientBrush  x:Key="RowHeaderBackgroundBrush" EndPoint="0.728,0.5" StartPoint="0.272,0.5">
    <GradientStop Color="#FF494949" Offset="0"/>
    <GradientStop Color="#FF3E3E3E" Offset="1"/>
    <GradientStop Color="#FF494949" Offset="0.50"/>
    <GradientStop Color="#FF3E3E3E" Offset="0.50"/>
</LinearGradientBrush>

<LinearGradientBrush x:Key="RowHeaderBackgroundBrushMouseOver" EndPoint="0.728,0.5" StartPoint="0.272,0.5">
    <GradientStop Color="#FF666666" Offset="0"/>
    <GradientStop Color="#FF525252" Offset="1"/>
    <GradientStop Color="#FF666666" Offset="0.50"/>
    <GradientStop Color="#FF525252" Offset="0.50"/>
</LinearGradientBrush>

<Style x:Key="RowHeaderGripperStyle" TargetType="{x:Type Thumb}">
    <Setter Property="Height" Value="8"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Cursor" Value="SizeNS"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}">
                <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="RowHeaderBorder" TargetType="Border">
    <Setter Property="Background" Value="{StaticResource RowHeaderBackgroundBrush}" />
    <Setter Property="BorderBrush" Value="#FF313131" />
    <Setter Property="BorderThickness" Value="0,0,1,1" />
    <Setter Property="CornerRadius" Value="0" />
    <Setter Property="Margin" Value="0" />

    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="{StaticResource RowHeaderBackgroundBrushMouseOver}"></Setter>
        </Trigger>
    </Style.Triggers>
</Style>

<Style x:Key="RowHeaderStyle1" TargetType="DataGridRowHeader">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridRowHeader">
                <Grid>
                    <Microsoft_Windows_Themes:DataGridHeaderBorder IsPressed="{TemplateBinding IsPressed}" Orientation="Horizontal" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}" Style="{StaticResource RowHeaderBorder}">
                        <StackPanel Orientation="Horizontal">
                            <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
                            <Control SnapsToDevicePixels="false" Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Visibility="{Binding (Validation.HasError), Converter={StaticResource bool2VisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"/>
                        </StackPanel>
                    </Microsoft_Windows_Themes:DataGridHeaderBorder>
                    <Thumb x:Name="PART_TopHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Top"/>
                    <Thumb x:Name="PART_BottomHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Bottom"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 覆盖 DataGrid RowHeader 模板并仍然设法选择行 的相关文章

随机推荐

  • 如何从 JFileChooser 检索 UNC 路径而不是映射的驱动器路径

    只是想知道是否有办法从使用 JFileChooser 选择的文件返回 UNC 路径 我要选择的文件将驻留在具有 UNC 路径的映射驱动器上 现在 我似乎只能拉回映射驱动器的驱动器号 From https stackoverflow com
  • 如何使用 Gmail API 检查传入的新邮件

    我已经设置了一个可以从 Gmail 帐户中提取数据的 python 脚本 但我想将其设置为仅提取自上次我进行 API 调用以来的新消息 我将定期 ping 服务器 我已经查看了推送通知和发布 订阅 但我不太确定这些是否相关 或者我应该看看其
  • 如何在一个页面上运行多个ajax调用

    如果我正在制作一个 ajax 化 用户界面 其中包含许多 ajax 调用 用于创建 重命名 删除页面上的各种内容 处理所有这些 代码隐藏 ajax 页面的最佳方法是什么 起初 我为每个调用都有一个不同的 php 文件 即 Candy Ren
  • 使用邮件包时,“短语中缺少单词:不支持字符集”

    我正在尝试解析电子邮件 但使用邮件包时出现此类错误 这是邮件包裹上的错误还是我应该自己处理的问题 missing word in phrase charset not supported gb18030 charset not suppor
  • 由于 SESSION_DOMAIN,laravel 无法登录

    我在 env 中设置了 SESSION DOMAIN example com 现在我无法使用正确的电子邮件和密码登录我的帐户 有人遇到这个问题吗 对于所有遇到此错误的人 当您更改 SESSION DOMAIN 环境参数时 Laravel 将
  • 尽管处于调试模式,Bottle.py 仍缓存模板

    我刚刚在 GAE 上构建了我的第一个 Bottle py 应用程序 它正在工作 只是当我更改模板时 我必须重新启动开发服务器才能看到更改 文档说 当 Bottle debug True 时 模板缓存应该被禁用 并且您也可以调用 Bottle
  • 使用后续查询时出现无法打开数据库文件错误

    我有以下代码 第一个光标对象工作正常 但是当我执行另一个查询并将其分配给 FlightCursor 时 它给出了错误 Cursor cursor database query CityAndAirportsTable notificatio
  • 在 Ionic 中设置 CORS

    我正在创建我的第一个离子应用程序 但我正在与cors斗争 我在这方面没有很多经验 所以这个问题可能看起来很愚蠢 我无权访问 api 站点 因此无法更改其中的任何内容 这是我用来从 api 站点获取数据的代码 我读到cors只是在使用离子服务
  • NSPredicate 精确匹配

    NSArray arrData NSArray arrayWithObjects cloud country plant country cloud plant country plant cloud clouds country plan
  • 在 Windows 中打印到控制台时需要回车吗?

    看起来只放一个换行就足够了 但我知道它应该是回车 换行 如果不输入回车符而只使用换行符 会发生什么可怕的事情吗 这是 ANSI C 格式的 不会重定向到文件或其他任何内容 只是一个普通的控制台应用程序 Windows 控制台遵循与文件或实际
  • 为什么我在 Maven 中收到“401 Unauthorized”错误?

    为什么我在 Maven 中收到 401 Unauthorized 错误 这是我调用时遇到的错误mvn deploy 完整日志位于底部 INFO BUILD FAILURE ERROR Failed to execute goal org a
  • Android 中“未找到活动”

    我正在使用navigation drawer在 eclipse 中做一个简单的 Android 应用程序的模板 我在片段方面遇到了一些麻烦 我在清单中声明了一个名为 PresenceLog Fragment 的片段 但是当我调用它时Main
  • 在哪里可以找到 docker 镜像的 sha256 代码?

    我想使用它们的 sha256 代码提取 CentOS Tomcat 的映像 例如 docker pull myimage sha256 0ecb2ad60 但我找不到可以在任何地方使用的 sha256 代码 我检查了 DockerHub 存
  • 如何在 do.call 中添加函数的更多参数?

    我的问题是我如何能够向do call功能 例如 我想画多面的grid情节与grid arrange 我如何添加更多参数 例如ncol 3 and main main title 到命令do call grid arrange plots 考
  • Scala无法解析继承的Java接口常量成员

    Java中的类层次结构 界面 Cluster Classify Class Kluster层次结构如下所示 Cluster lt Kluster Classify lt File oop Cluster java package oop p
  • 滚动多元回归面板数据

    我正在尝试对过去 36 个月内对其中 18 个月进行观察的公司执行时间 t 的滚动回归 但我无法使该函数发挥作用 我只想要 var1 的系数 X y z 是控制变量 这是我尝试运行的数据和代码的示例 structure list Year
  • 使用宏“覆盖”cmake 命令并恢复其默认行为

    我有以下 简化的 目录结构 doc subdir1 subdir2 CMakeLists txt
  • Azure数据工厂:处理until/for活动中的内部故障

    我有一个包含 Until 活动的 Azure 数据工厂 v2 管道 在 的里面until是一个复制活动 如果失败 则会记录错误 与本文中完全相同 并且我希望循环继续 Azure 数据工厂管道 发生故障 虽然内部复制活动的错误已得到处理 但u
  • 使用键对对象数组进行排序

    我正在用 javascript 尝试我所知道的一切 有没有办法根据键对其进行排序 var myObj 2 installation diagnostics status 4 installation diagnostics status 3
  • WPF 覆盖 DataGrid RowHeader 模板并仍然设法选择行

    我已覆盖默认行标题样式以使用我的自定义按钮