自定义按钮的前景色(ControlPresenter)

2024-03-28

我正在尝试在 App.xaml 中定义全局按钮样式,它基本上按我的预期工作。但是,我只是不知道如何让前台正常工作。无论我做什么,我都会获得默认 TextBlock 的样式(它将颜色设置为白色)。

    <Style TargetType="{x:Type Button}">
        <Setter Property="Margin" Value="3, 5" />
        <Setter Property="OverridesDefaultStyle" Value="True" />
        <Setter Property="FocusVisualStyle" 
                Value="{StaticResource ButtonFocusVisual}" />
        <Setter Property="Foreground" Value="Red" />
        <Setter Property="Padding" Value="5" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Grid x:Name="gridMainButton"
                          RenderTransformOrigin="0.5, 0.5">
                        <Grid.RenderTransform>
                            <ScaleTransform x:Name="scaleTransform" 
                                            CenterX="0.5"
                                            CenterY="0.5" />
                        </Grid.RenderTransform>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates" >
                                <VisualState x:Name="Normal" />
                                <VisualState x:Name="MouseOver" />
                                <VisualState x:Name="Pressed">
                                    <Storyboard>
                                        <DoubleAnimation
                                              Storyboard.TargetName="scaleTransform"
                                              Storyboard.TargetProperty="ScaleX"
                                              Duration="0"
                                              To="0.85" />
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>

                        <Ellipse x:Name="ellipse"
                                 HorizontalAlignment="Stretch"
                                 VerticalAlignment="Stretch"
                                 StrokeThickness="2"
                                 Stroke="{StaticResource standardBackground}"
                                 Fill="{StaticResource standardBackground}" />
                        <ContentPresenter HorizontalAlignment="Center"
                                          VerticalAlignment="Center"
                                          Margin="4, 8"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我想我可以将 ContentPresenter 更改为 TextBlock,这对于这个特定的应用程序来说没问题,但我正在寻找更通用的解决方案。

Thanks,
wTs


就像 Markus Hütter 所说,问题可能是你有一个隐式的样式TextBlock定义并且当Button Content被设置为一个字符串,aTextBlock将在您拥有的地方创建ContentPresenter在模板中。这TextBlock将拾取隐式样式,这就是您遇到此问题的原因。

您可以禁用隐式样式TextBlock通过指定 a 为字符串创建的 sDataTemplate for string。将以下内容添加到 App.xaml

<Application ...>
    <Application.Resources>
        <DataTemplate xmlns:sys="clr-namespace:System;assembly=mscorlib"
                      DataType="{x:Type sys:String}">
            <TextBlock Text="{Binding}">
                <TextBlock.Resources>
                    <Style TargetType="{x:Type TextBlock}"/>
                </TextBlock.Resources>
            </TextBlock>
        </DataTemplate>
        <!--...-->
    </Application.Resources>
</Application>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义按钮的前景色(ControlPresenter) 的相关文章

  • 在 WPF 中向上/向下移动 ListBoxItem

    我创建了一个包含文件名的列表框 我想为用户提供一个选项 可以使用上 下按钮并使用拖放来上下移动文件名 任何人都知道如何实现此功能 XAML 代码
  • wpf 调试错误输出 System.WIndows.Data 错误 25

    我有一个自定义样式的组合框 效果很好 它被放置在用户控件内并绑定到数据结构 我使用 DisplayMemberPath 仅显示组合框文本框中的一个元素 ComboBox 样式取自 MSDN 并被多次使用 所以这里就不显示了
  • 如何自动创建 WPF Viewmodel 属性

    我在 WPF 项目中使用 Visual Studio 17 和 Resharper 该项目向用户显示大量信息 因此我有很多如下所示的属性 private double foo public double Foo get return foo
  • WPF 绑定默认模式

    在我的一个应用程序中 我有这样的代码
  • 是否可以更改 WPF 控件的父级

    是否可以更改 WPF 控件的父控件 这是一个例子 StackPanel堆栈1有Buttonbtn1 在里面 还有一个空的StackPanel堆栈2 我想以编程方式将 btn1 移动到 stack2 谢谢您的帮助 您可以通过以下方式执行此操作
  • 如何在 wpf 密码框设置一些默认文本? [复制]

    这个问题在这里已经有答案了 可能的重复 WPF 中的水印文本框 https stackoverflow com questions 833943 watermark textbox in wpf 我可以知道如何在 WPF 的密码框中放入一些
  • 使用 MVVM 的 C# 泛型,将 T 从 中取出

    My Model是一个泛型类 包含 例如 Value属性可以是 int float string bool 等 所以很自然地 这个类的表示形式如下Model
  • 如何获取 WPF 用户控件可见部分的大小?

    我有一个由标签和文本框组成的用户控件 它位于滚动查看器内 我正在其顶部绘制一个装饰器 并且需要将装饰器的大小调整为控件的可见大小 如何获得控件的可见大小 在下图中 绿色矩形是装饰器 正如您所看到的 它被绘制在右侧的滚动条上 是否可以获得渲染
  • DataTemplateSelector 中的项目为空

    使用 dataTemplateSelector 根据枚举值为我的视图模型选择正确的数据模板时遇到了一些问题 这是重现该问题的演示 我有一个由我的 viewModel 使用的模型层次结构 定义模型类型的枚举是 public enum Mode
  • WPF 图像控件源绑定

    我是 WPF 和 C 的新手 我尝试实现以下功能 但在多次尝试后失败了 谁能帮我吗 我有一个图像控件
  • .NET WPF 窗口淡入和淡出动画

    下面是窗口淡入和淡出动画的代码片段 Create the fade in storyboard fadeInStoryboard new Storyboard fadeInStoryboard Completed new EventHand
  • RenderTargetBitmap 内存泄漏

    我正在尝试使用 RenderTargetBitmap 渲染图像 每次我从 RenderTargetBitmap 创建一个实例来渲染图像时 内存都会增加 完成后内存永远不会释放 这是代码 RenderTargetBitmap rtb new
  • 在 WPF 中显示 Drawing.Image

    我有一个 System Drawing Image 的实例 如何在我的 WPF 应用程序中显示这一点 我尝试过img Source但这不起作用 我有同样的问题并通过结合多个答案来解决它 System Drawing Bitmap bmp I
  • 将按钮控件嵌入到现有 Direct3D 应用程序中

    我想将自己的内容覆盖在 Direct3D v9 游戏 由第三方制作 之上 叠加互动按钮 具体来说 我想覆盖一个可点击的按钮控件 就像 Steam 所做的那样 尽管我正在尝试一个更简单的界面 理想情况下 我能够覆盖 WPF 按钮或 Windo
  • 运行时动态转换

    有没有一种方法可以在运行时动态转换 如以下伪代码 foreach DataRow row in table Rows foreach DataColumn col in table Columns if row col DBNull Val
  • WPF DataGrid DataBindingComplete 事件在哪里?

    数据绑定完成后 我需要采取一些操作 例如 根据其他一些单元格使某些单元格只读 在WinForm DataGridView中 我曾经在DataBindingComplete事件中执行此操作 但是 我在 WPF DataGrid 中找不到这样的
  • 如何在不违反 MVVM 的情况下绑定到不可绑定的属性?

    我在用SharpVector 的 SvgViewBox https sharpvectors codeplex com 显示静态资源图像 如下所示
  • 绑定到多个索引器

    我正在尝试将索引属性与两个索引器绑定 该属性看起来像这样 public Item this int x int y get return items x y set items x y value 根据http msdn microsoft
  • 如何将 MouseDown 事件放入样式中?

    这有效 XAML
  • WPF:什么会导致 ComboBox 无法虚拟化?

    这是我的组合框 它似乎没有虚拟化 但我不明白为什么 您知道有什么会导致这种情况吗

随机推荐

  • Android 自定义 EditText 在 ICS 中不显示光标

    我的应用程序中有一个 EditText 它仅接收来自我放置在屏幕上的按钮的输入 为了避免出现软键盘 我有一个自定义的 EditText 类 如下所示 public class CustomEditText extends EditText
  • “不为空”和“不为空”有什么区别

    SELECT id FROM customers WHERE type IS NOT Null Versus SELECT id FROM customers WHERE NOT type IS NULL 上述任何一个返回的数据都将完全相同
  • sp_getapplock 无事务

    我正在实现内部没有事务的存储过程 事实上 它会 但仅限于特定地点 以将时间减少到最少 存储过程的本质是我一次只想运行一个 我尝试使用 sp getapplock 但很快发现它需要在事务内部 是否有其他选择可以在整个过程上锁定但不将其包装到事
  • 没有为类型“QuerySnapshot”定义 getter“文档”

    尝试从 Firestore 实时数据库访问数据 但我一直收到此消息和其他几条消息 在这种情况下我该如何访问数据 先感谢您 class HomePage extends StatefulWidget override HomePageStat
  • 如何在不单击表单的情况下触发表单上的默认按钮(winforms)?

    我有两个文本框 一个用于登录 ID 另一个用于密码 并且有一个按钮 提交 我需要一个获取登录 ID 和密码值的事件 即 无需单击鼠标 我需要调用此事件 只需按键盘上的 输入 即可 有谁能够帮助我 提前致谢 斯里尼 将按钮设置为表单上的接受按
  • 格式化 NumPy 数组

    我要这个 SP 1 2 3 1 1 000000e 00 2 000000e 00 3 000000e 00 2 1 630000e 01 1 990000e 01 1 840000e 01 3 1 630000e 01 1 990000e
  • 带有运行时构造函数参数的键控委托工厂?

    假设我有以下服务和组件 public interface IService void DoWork public class ServiceA IService private readonly string name public Ser
  • Laravel - 填充数据库中缺失的日期和计数

    我需要根据我收到的日期发送每个日期的观看次数 request 从控制器中的查询中 我获取了如下所示的图表数据 time 2016 05 01 count 2 time 2016 05 02 count 3 time 2016 05 03 c
  • const 键和非 const 键有什么区别?

    下面两行有什么区别 map
  • 使用 Cordova 插件拍摄全景图像?

    是否可以使用某些 cordova 插件 在 X 轴和 Y 轴 拍摄全景图像 感谢您的任何建议 相机插件启动设备的相机应用程序 所以我想在带有全景相机应用程序的手机上 您可以从科尔多瓦应用程序中拍摄全景图 用户必须手动选择该功能 否则你必须要
  • C# .NET 应用程序设置和升级

    我使用 Settings Default MySettingName 和 Settings Default Save 来保存和加载设置 当我更改版本号时 如何从旧版本获取设置并将其应用到新版本 我只是不太明白 Settings Upgrad
  • 使用 JavaScript 显示/隐藏图像

    我有一个 HTML 页面 其中包含一个通过 CSS 设置为不可见的图像visibility hidden 我想创建一个名为 显示图像 的链接 这样当我单击它时 就会出现图像 现在 我不知道如何建立这样的链接 因为通常与 a href 链接到
  • ChatBot 在 Web 模拟器中无法运行,但在本地 Bot Framework 模拟器中运行良好

    我开发了与 SharePoint On Premise 集成的 ChatBot 当我在模拟器中调试 ChatBot 时 它可以工作 但是 当我使用 DirectLine 在 Azure 中的 Web 模拟器和公司网站托管的网站上进行调试时
  • 为什么 Symantec CSR 检查程序认为我的 CSR 在 AlgorithmIdentifier 中缺少 NULL 值? RFC3279

    由于许多令人不快的原因 我一直在尝试使用 bouncycastle API 手动构建自己的证书签名请求 表面上 我选择这样做是因为我需要 CSR 的预签名版本 以便使用存储在 HSM 中并在 LMK 下加密的密钥生成 sha256withR
  • 非交互模式的 Powershell 测试

    我有一个可以手动运行或可以通过计划任务运行的脚本 我需要以编程方式确定我是在非交互模式 通过计划任务运行时设置 还是正常模式下运行 我用谷歌搜索了一下 我能找到的最好的方法是添加命令行参数 但我没有任何可行的方法来处理计划任务 也不能合理地
  • 当我运行“gatsbydevelopment”时,安装“sharp”模块出现错误,显示错误

    gatsby develop success openly and validate gatsby configs 0 005 s error Something went wrong installing the sharp module
  • 无法在 go 中用作赋值类型

    当我编译代码时 收到以下错误消息 不知道为什么会发生 有人可以帮我指出为什么吗 先感谢您 不能使用 px InitializePaxosInstance val 类型 PaxosInstance 作为 在赋值中输入 PaxosInstanc
  • Laravel 5.2 队列忽略 .env

    我有一个 Laravel 5 2 应用程序 当用户购买产品时它会发送几封电子邮件 电子邮件视图包含对一些图像的引用 如下所示 img src 这在我拥有的所有 3 个环境中都运行良好 本地 登台和生产 asset 使用每个环境中配置的 AP
  • 验证码解码

    我见过一些验证码使用 javascript php 等进行解码 他们是如何做到的 比如很受欢迎的超级上传 site s 验证码也已被解码 http herecomethelizards co uk mu captcha 我是一名图像处理专家
  • 自定义按钮的前景色(ControlPresenter)

    我正在尝试在 App xaml 中定义全局按钮样式 它基本上按我的预期工作 但是 我只是不知道如何让前台正常工作 无论我做什么 我都会获得默认 TextBlock 的样式 它将颜色设置为白色