WPF 中的下划线标签,使用样式

2024-01-09

我有以下风格:

<Style x:Key="ActionLabelStyle" TargetType="{x:Type Label}">
    <Setter Property="Margin" Value="10,3" />
    <Setter Property="Padding" Value="0" />
    <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
    <Setter Property="FontFamily" Value="Calibri" />
    <Style.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsMouseOver" Value="True" />
                <Condition Property="IsEnabled" Value="True" />
            </MultiTrigger.Conditions>
            <Setter Property="Background" Value="Red" />
            <Setter Property="TextBlock.TextDecorations" Value="Underline" />
        </MultiTrigger>
    </Style.Triggers>
</Style>

所以基本上,我想要一个在启用且鼠标光标位于其上方时带有下划线的标签。这种风格不起作用的部分是<Setter Property="TextBlock.TextDecorations" Value="Underline" />。现在,我在这里做错了什么?感谢您的所有帮助。


这实际上比看起来要困难得多。在 WPF 中,标签不是 TextBlock。它派生自 ContentControl,因此可以在其 Content 集合中托管其他非文本控件。

但是,您可以指定一个字符串作为内容,如下例所示。在内部,将构造一个 TextBlock 来为您托管文本。

<Label Content="Test!"/>

这在内部翻译为:

    <Label>
        <Label.Content>
            <TextBlock>
                Test!
            </TextBlock>
        </Label.Content>
    </Label>

对此的简单解决方案是将 TextBlock 的 TextDecorations 属性作为附加属性。例如,FontSize 就是这样设计的,因此以下内容有效:

    <Label TextBlock.FontSize="24">
        <Label.Content>
            <TextBlock>
                Test!
            </TextBlock>
        </Label.Content>
    </Label>

TextBlock.FontSize 附加属性可以应用于可视化树中的任何位置,并将覆盖树中任何 TextBlock 后代上该属性的默认值。然而,TextDecorations 属性并不是这样设计的。

这至少给你留下了一些选择。

  1. 使用颜色、边框、光标等,而不是带下划线的文本,因为这 100% 更容易实现。
  2. 更改执行此操作的方式以将样式应用到 TextBlock。
  3. 不厌其烦去创造你自己的附属财产 http://alexshed.spaces.live.com/blog/cns!71C72270309CE838!139.entry以及遵守它的控制模板。
  4. 执行如下操作来嵌套显示为样式子项的 TextBlock 的样式:

仅供参考,这是迄今为止我在 WPF 中做过的最丑陋的事情,但它确实有效!

    <Style x:Key="ActionLabelStyle" TargetType="{x:Type Label}">
        <Setter Property="Margin" Value="10,3" />
        <Setter Property="Padding" Value="0" />
        <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
        <Setter Property="FontFamily" Value="Calibri" />
        <Style.Triggers>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsMouseOver" Value="True" />
                    <Condition Property="IsEnabled" Value="True" />
                </MultiTrigger.Conditions>
                <Setter Property="Background" Value="Red" />
            </MultiTrigger>
        </Style.Triggers>
        <Style.Resources>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Label}, Path=IsMouseOver}" Value="True" />
                            <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled}" Value="True" />
                        </MultiDataTrigger.Conditions>
                        <Setter Property="TextDecorations" Value="Underline"/>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </Style.Resources>
    </Style>

这是有效的,因为它会覆盖该样式标签下任何 TextBlock 的默认样式。然后,它使用 MultiDataTrigger 允许相对绑定返回到 Label,以检查其 IsMouseOver 属性是否为 True。恶心。

Edit:

请注意,这仅在您显式创建 TextBlock 时才有效。当我发布此内容时我错了,因为我已经弄脏了我的测试标签。嘘。谢谢安瓦卡指出这一点。

    <Label Style="{StaticResource ActionLabelStyle}">
        <TextBlock>Test!</TextBlock>
    </Label>

这确实有效,但如果你非得遇到这个麻烦,那你就工作得太辛苦了。要么有人会发布一些更聪明的东西,要么正如你所说,我的选项 1 现在看起来相当不错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 中的下划线标签,使用样式 的相关文章

  • 如何按 z-index 对 Windows 进行排序?

    如果我枚举窗口Application Current Windows 对于任意两个窗口 我如何判断哪一个 更接近 即具有更大的 z index 或者 换句话说 我如何按 z 索引对这些窗口进行排序 您无法从 WPF 获取 Window 的
  • WPF XAML 绑定和 CurrentCulture 显示

    当 CurrentCulture 更改时 我发现 XAML 文档出现一些无效行为 当我在窗口中有一些这样的元素时
  • Xamarin Forms 可折叠 StackLayout

    我正在尝试实现一种可折叠的 StackLayout 每次用户单击该按钮时 它都会展开或折叠堆栈布局以显示 隐藏更多详细信息 我能够使用下面的代码实现更多 更少的效果 但它看起来不正确 效果也不是很好 因为它立即增长 并且我正在将效果应用到其
  • MVVM 中动态创建 MenuItem-Separator 的 WPF 光学样式

    我有一个MenuItem从动态创建其子菜单项ItemsSource 财产 对于分组 我在菜单中有分隔符 分隔符是由 ItemsSource 集合中的 ControlTemplate 为每个空条目创建的MenuItem ItemContain
  • WPF ComboBox 中具有本地化名称的枚举

    我有一个列出枚举的组合框 enum StatusEnum Open 1 Closed 2 InProgress 3
  • WPF 应用程序在第一次交互(例如单击按钮)后停止/冻结

    我目前在 WPF 中遇到问题 UI 加载正常 但每当进行第一次用户交互时 例如单击按钮 应用程序似乎会停止 或者例如 如果我有两个显示 MessageBox 的按钮 则第一次单击将等待几秒钟 然后显示MessageBox 但任何后续交互都是
  • 如何以编程方式将访问键(快捷方式)添加到 WPF ContextMenu?

    我已经有以下内容 var myContextMenu new System Windows Controls ContextMenu var exitItem new MenuItem exitItem Header E xit exitI
  • Xamarin Dim 页面(主详细信息页面)

    因此 对于 Android 当显示主从页面的母版页时 母版页会被 黑色暗淡 视图覆盖 因此很容易用眼睛区分这两个页面 在 iOS 中 详细信息页面不会变暗 因此更难区分视图 有没有办法用 黑色半透明 的 BoxView 或 Frame 覆盖
  • 我对 MVVM 模式有一些疑问

    我叫 Jes s 来自西班牙 是一名 NET 开发人员 几天前我刚刚发现了这个伟大的网络 我有一些关于 MVVM 模式的问题 如果您能回答我 我将很高兴 我三个月前开始使用 WPF 并且学习了 MVP 模式 MVP 非常好 因为您可以很好地
  • 在代码中而不是 XAML 中呈现 UserControl

    我想用RenderTargetBitmap将 UserControl 呈现为位图 而无需为其编写 XAML 当我这样做时 我得到一张空白图像 我是否错过了关键的一步 ValTool Controls VideoFisheyeOverlayC
  • 如何向 ItemsControl 中的 WPF 按钮添加相同的命令

    如何将命令添加到 wpf 按钮 该按钮是ItemsControl并正在修改ItemsSource itself 这是我的 XAML
  • 如何从 XAML 中为样式中的控件指定工具提示?

    我正在使用 Microsoft CodePlex 项目中的 WPF 数据网格 我有一个自定义控件 我想将其数据绑定到数据网格行中的字段 我一生都无法弄清楚如何在数据网格行上指定工具提示 我最接近的是使用 RowStyle 和 Setter
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • 如何从 WPF 窗口显示 Winforms 对话框?

    这个问题的反面已经被回答过很多次了 public static void SetOwner object activeWindow object dialog if IsWindow dialog IsWindow activeWindow
  • 中继命令和无参数执行方法

    我目前正在学习 WPF 和 MVVM 我想我已经了解了大部分内容及其工作原理 但我在使用 RelayCommand 或 DelegateCommand 时遇到了一些我不明白的问题 我认为这与代表的工作方式有关 请注意 下面的代码目前仅处于测
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • WPF中ViewModel是否应该继承DependencyObject?

    我尝试创建一个简单的UserControl在 WPF 中使用 MVVM 现在我需要为UserControl 所以我尝试在中创建依赖属性UserControlViewModel 我不想处于代码隐藏状态 为了创建依赖属性UserControlV
  • ComboBox.ItemTemplate 未正确显示选择

    在问题中c wpf 无法同时设置 DisplayMemberPath 和 ItemTemplate https stackoverflow com questions 18273415 c sharp wpf cannot set both
  • WPF 中的屏幕分辨率问题?

    我将在 WPF 中使用以下代码检测分辨率 double height System Windows SystemParameters PrimaryScreenHeight double width System Windows Syste
  • iframe 主体删除空间

    我的 iframe 风格为style width 100 几乎覆盖了页面宽度 但它在左侧和右侧留下了一个小边距 所以我添加了body margin 0px 删除空间 它有效 但问题是删除边距影响其他事物 例如段落 p inside 有没有办

随机推荐

  • 为什么我无法在 C# 中序列化元组? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 XML Serialized 类需要无参数构造函数 https stackoverflow com questions 267724 why xml serializable class ne
  • 沿着贝塞尔曲线路径放置图像

    有谁知道如何沿着贝塞尔路径放置图像 我可以很好地编写路径并沿着路径为精灵设置动画 但我想让路径成为一系列箭头而不是虚线 我认为一定有一种方法可以在整个路径上添加箭头图像 但找不到它 而且路径都是弯曲的 UIBezierPath path U
  • 如何复制带有指向内部数据的指针的结构(以便复制它们指向的指针和数据)?

    所以我有一个像这样的结构 struct GetResultStructure int length char ptr 我需要一种方法来制作它的完整副本 这意味着我需要一个副本来拥有一个结构 其中新的 ptr 指向我在原始结构中拥有的数据副本
  • 自定义 datagridview 的结果

    当我的客户 BindingSource 从 datagridview 搜索客户时 当找不到匹配项时 我需要一个显示 未找到结果 的消息框 而不仅仅是 什么也不显示 尝试这个 Dim emptyRowCount As Integer IIf
  • 使用调色板功能时使 NA 透明

    这是我的数据框 Test structure list Corr p c 0 65 0 64 0 64 NA 0 79 0 77 Case p c 24 57 12 89 20 92 NA 11 1 12 2 Control p c 16
  • 为绘图应用程序添加撤消功能

    我关注了一个raywenderlich 教程 http www raywenderlich com 87899 make simple drawing app uikit swift关于使用 UIKit 制作绘图应用程序 我现在正在尝试添加
  • 居中位图标记(Google 地图 Android API v2)

    当我从自定义位图中添加标记时 标记未以我指定的点为中心 我这样添加 ID tramo final int tramoId tr getId Nodos final Nodo nodos tr getNodos final PolylineO
  • 如何使用 php 解析 .plist 文件?

    我可以用 php 解析 plist 文件并将其放入数组中吗 POST 这样我就可以打电话 POST body 并获取具有以下内容的字符串
  • 如何在 Emacs 中突出显示选项卡

    我在源代码中使用空格进行缩进 如何突出显示 标记代码中的选项卡 可能是红色的 和我用的时候一样 setq default show trailing whitespace t 作为 abo abo 的提示 我发现我可以在以下代码中使用空白模
  • HttpClient 存储在哪个程序集中

    我想使用HttpClient来自 WCF Rest Service 的类 用于创建调用 Rest 的客户端 服务 我听说它已被纳入 net 4 0 但不知道它存储在哪个程序集中 根据这个 MSDN 页面 http msdn microsof
  • ViewModel 中的 ASP.NET MVC SelectList

    我正在使用 ASP NET MVC 5 但这很可能也适用于以前的版本 提出这个问题的最佳方法是向您展示代码 这是视图模型 public class PersonCreateViewModel public SelectList cities
  • 有没有办法将 UNC 路径映射到 Windows 2003 上的本地文件夹?

    我知道我可以将 UNC 路径映射到本地驱动器号 但是 我想知道是否有办法将 UNC 路径映射到本地文件夹 我有一个程序 其中硬编码到程序中的特定文件夹 我想尝试创建一个映射到 UNC 路径的同名文件夹 以便可以从网络共享访问数据 这可行吗
  • R 中的跟踪函数

    我想跟踪一个函数 以便它在调用时打印它的所有参数 当它返回结果时 它会打印返回值和参数 函数跟踪允许定义在进入和退出函数调用时要执行的操作 是否有一个函数返回函数内的参数列表 是否有一种方法无需执行多个分支中的每个分支即可获取结果值 每个分
  • 查找矩阵中的面积数

    假设我有一个像这样的矩阵 1 1 1 0 0 0 1 1 1 0 0 1 0 0 0 0 0 1 如果两个 1 彼此相邻 仅水平和垂直 因此属于同一区域 我需要找出矩阵中有多少个这些区域 您可以看到该矩阵中有两个区域为 1 我已经尝试解决这
  • 当是公共存储库时,什么应该包含 .gitignore 文件?

    我一直在学习有关 gitignore 文件的所有内容 但有一个问题我想解决 gitignore 应包含您要忽略的所有文件 因此 您应该忽略操作系统 您正在使用的 IDE 生成的文件 当存储库位于 Github 上并且人们可以克隆它并推送更改
  • Sass 数组中的随机颜色[重复]

    这个问题在这里已经有答案了 我想指定一个颜色数组 然后将颜色随机应用到列表中 到目前为止 我已经做到了颜色会按顺序循环 我怎样才能随机化它 这是到目前为止的 Sass 代码 colors red orange yellow green bl
  • 根据异常类型调用ContainerStoppingErrorHandler

    我使用的是 spring kafka 版本 2 2 4 Release 和 Kafka 版本 2 11 我在用容器停止错误处理程序作为我的错误处理程序 每当出现异常时 就会调用此方法并停止容器 现在 我需要根据异常类型停止容器 如果发生某些
  • 如何检测特定区域的触摸

    目前我看到触摸事件将向我显示发生触摸的 UIView 但是 如果我需要检测某些非矩形形状 例如圆形 的触摸该怎么办 我该如何去做这样的事情呢 基本上 只有当用户触摸不可见的圆形区域内的某处时 我才想做一些事情 感谢任何帮助 指导 TIA 你
  • 了解 PHP/Laravel 中的构造函数、$this 关键字和控制器类

    我知道以前已经对此进行过介绍 但我正在努力解决如何将其应用到我的代码中 我正在 Laravel 中开发一个 PHP 应用程序 但希望使我的代码更加模块化和可测试 这意味着将我的逻辑从我的重型控制器中分离出来 并将它们分离到单独的文件中 并从
  • WPF 中的下划线标签,使用样式

    我有以下风格