自定义 Mahapps.MetroWindow 关闭按钮

2024-02-22

我正在使用 Mahapps.MetroWindow (http://mahapps.com/ http://mahapps.com/)来设计我的应用程序外观,现在我正在寻找自定义 X / 关闭按钮外观的正确方法。默认情况下,MetroWindow 将自定义样式应用于所有三个命令按钮。我希望与 Windows 保持一致,关闭按钮始终为红色or鼠标悬停时变为红色。

到目前为止我发现的是,我可以设置WindowCloseButtonStyle属性到自定义样式。我这样做是这样的:

<controls:MetroWindow x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
    Title="MainWindow" 
    Height="350" 
    Width="525"
    WindowCloseButtonStyle="{DynamicResource RedCloseWindowButtonStyle}">
...

在一个单独的 XAML 文件中,我将样式定义为

<Style x:Key="RedCloseWindowButtonStyle"
       TargetType="{x:Type Button}"
       BasedOn="{StaticResource MetroBaseWindowButtonStyle}">
    <Setter Property="XXX"
               Value="XXX" />
</Style>

我假设我必须在样式设置器中填写 XXX 的空白。由于我是 Windows 开发新手,我的问题是:我感兴趣的属性是什么?在哪里可以找到浏览器来根据给定的上下文浏览可用属性?如果我想完成上面描述的事情,风格价值是什么?


以下是具有鼠标悬停/按下效果的关闭按钮的继承自定义样式:

<Style x:Key="MetroWindowCloseButtonStyle"
       TargetType="{x:Type Button}"
       BasedOn="{StaticResource MetroWindowButtonStyle}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid x:Name="grid"
                      Background="{TemplateBinding Background}">
                    <ContentPresenter x:Name="contentPresenter"
                                      HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                      Margin="{TemplateBinding Padding}"
                                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                      RecognizesAccessKey="True"
                                      Opacity="0.75" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver"
                             Value="True">
                        <Setter TargetName="contentPresenter"
                                Property="Opacity"
                                Value="1" />
                        <Setter TargetName="grid"
                                Property="Background"
                                Value="#E04343" />
                    </Trigger>
                    <Trigger Property="IsMouseOver"
                             Value="False">
                        <Setter TargetName="contentPresenter"
                                Property="Opacity"
                                Value=".5" />
                    </Trigger>
                    <Trigger Property="IsPressed"
                             Value="True">
                        <Setter TargetName="grid"
                                Property="Background"
                                Value="#993D3D" />
                    </Trigger>
                    <Trigger Property="IsEnabled"
                             Value="false">
                        <Setter Property="Foreground"
                                Value="#ADADAD" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

原始(过时)样式可以在此处找到GitHub https://github.com/MahApps/MahApps.Metro/blob/cb9264828def32d2c55ec32dc0426c8a72aa793d/src/MahApps.Metro/Styles/Controls.Buttons.xaml#L397-L410

希望有帮助。

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

自定义 Mahapps.MetroWindow 关闭按钮 的相关文章

  • ASP.NET MVC 和 Expression XAML - 如何集成?

    一些背景 ASP net MVC 主要是构建和开发 ASP NET 应用程序方式的范式转变 从 代码隐藏 类型的心态转变为更像标准 MVC Ruby on Rails 的心态 我赞扬它作为一种简化工具来简化单元测试和代码分离 尽管 html
  • 网格内的 ContentPresenter 可见性绑定不起作用?

    我有以下网格
  • 从 xaml 获取 RowIndex

    我有一个带有 DataGridTemplateColumns 的 DataGrid 在 TemplateColumn 中 我使用工作正常的 DataTrigger 它从 DataGrid 父级检索项目计数
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 如何在C#背后的代码中动态创建数据模板并绑定TreeView分层数据

    我有一个场景 其中树视图动态更改其数据模板和数据绑定定义 我在 XAML 中创建了一个树视图 如下所示
  • 如何使 WPF 应用程序在 Web 浏览器上运行

    我们有一个用 WPF 编写的现有应用程序 我们正在寻找一种迁移它的方法 以便它可以在 Web 浏览器上运行 深入研究后 我们似乎需要找到一种将代码编译为 WebAssembly 的方法 但我不确定它对于现有的完全加载的 WPF 应用程序有多
  • 先学Silverlight还是先学WPF?

    看来 Silverlight WPF 是 NET 用户界面开发的长期未来 这很棒 因为我可以看到在客户端和 Web 开发端重用 XAML 技能的优势 但看看 WPF XAML Silverlight 它们似乎是非常庞大的技术 那么从哪里开始
  • 混合 MFC 和 WPF:模态对话框

    我使用 C CLI 界面层将 C WPF 对话框添加到现有的 C MFC 应用程序 我一切正常 只是我遇到了形式问题 例如 MFC 应用程序使用 ShowDialog 显示 WPF 对话框 按预期工作 该 WPF 对话框显示使用 DoMod
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • PreviewKeyDown 不会在 ElementHost 中针对 Tab 和箭头键触发

    我在 Winforms ElementHost 中有一个 WPF 窗口 我的窗口上的 Tab 键和箭头键不会触发 KeyDown 和 PreviewKeyDown 事件 KeyUp 和 PreviewKeyUp 似乎工作正常 Preview
  • Visual Studio 扩展找不到所需的程序集

    我为 Visual Studio 2013 编写了一个扩展 因为该死的组合框错误 https stackoverflow com questions 7800032 cancel combobox selection in wpf with
  • 阻止 WPF 文本框增长

    我花了两个小时研究如何避免在输入长文本时我的 WPF TextBox 控件变长 但我无法做到这一点 即使我读过一些关于它的答案 如下所示 停止 wpf textbox from grow with text https stackoverf
  • 使用 ICollectionView 过滤 ObservableCollection

    I have ObservableCollection绑定到dataGrid现在我想过滤我看到需要使用的呈现数据ICollectionView但我不知道如何添加ICollectionView和我的MVVM图案 我的代码简化如下 public
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • Windows Phone 8.1 ComboBox 在项目数量较多时显示多个项目

    当组合框中有更多项目时 组合框将显示列表选择器弹出按钮 如果我选择第一个并向下滚动 则多个项目将显示为选定的 但 ComboBox 的 SelectedItem 将是我选择的项目 我修改了ListPickerFlyout的样式 并关闭了Li
  • WPF:如何避免图像超出 Canvas 的边界?

    我有一个画布作为图像查看器 它的背景用于放置图像 我想在其上面放置另一个图像 所以 场景是这样的
  • 当 AutoGenerateColumns = True 时如何重命名 DataGrid 列?

    我有一个简单的数据结构类 public class Client public String name set get public String claim number set get 我正在将其喂入DataGrid this data

随机推荐

  • 找不到符号类“Builder”

    我最近下载了Android Studio 我认为它比eclipse 我创建了一个新项目 其中包含登录活动 但该活动似乎有错误 在此处输入图像描述 1 Error 78 31 error cannot find symbol class Bu
  • 递归读取文件夹并对每个文件夹执行命令

    我试图递归到文件夹 然后使用 bash 脚本在它们上运行命令 有什么建议么 如果您想递归到目录 对其中找到的每个文件执行命令 我会使用find我认为 命令 而不是使用 shell 脚本编写任何内容 该命令可以接收很多参数 例如type过滤返
  • XNA Content.Load 如何操作?

    我只是好奇它是否在每次调用时实际上将资源加载到内存中 或者如果它查找它 发现它是否已加载 如果未加载 则加载一次并仅保留引用 以便第二次调用它只是获取对它的引用 它会跟踪已加载的内容 并且如果之前已加载过该对象 则仅返回对同一对象的引用 这
  • OpenCV 和 Python - 图像太大而无法显示

    我的图像尺寸为 6400 3200 而我的屏幕为 1280 x 800 因此 仅需要调整图像大小以供显示 我正在使用 Python 和 OpenCV 2 4 9 根据OpenCV 文档 http docs opencv org 2 4 mo
  • Docker-compose 异常

    溢出 我尝试将 docker compose 脚本从我的 ubuntu 工作站传输到我的 Fedora 笔记本电脑 当击中时 docker compose up 我得到以下异常 polito localhost dev docker com
  • 为什么 Android Studio 无法引用仅包含在 build.gradle 中的库?

    在我的应用程序中 我使用 Guava 库 我在我的文章中引用了它build gradle文件仅如下 dependencies compile com google guava guava 13 0 1 我的应用程序重建并运行良好 然而 当我
  • 使用条件运算符时没有隐式转换[重复]

    这个问题在这里已经有答案了 我有以下课程 abstract class AClass class Foo AClass class Bar AClass 当我尝试使用它们时 AClass myInstance myInstance true
  • 通过拖放到批处理文件上运行命令

    我想将文件拖放到批处理文件上 以便对其运行以下命令 如何在删除的文件上运行命令 PotreeConverter exe
  • 如何在 OpenShift 上部署多模块 Maven Spring Boot 应用程序

    我有一个要部署的多模块 spring boot 项目开放式换档 https www openshift com 我也在那里安装了 Jenkins 源代码托管在 Github 上 每个模块都包含一场战争 以便拥有微服务结构
  • C++ 冒泡排序双向链表

    我知道冒泡排序可能不是最快的方法 但它是可以接受的 我只是在将算法调整为数组中的双链接列表时遇到麻烦 我的双链表有一个 int 类型和一个 string 类型来保存数字和单词 我的列表是用插入排序来排序的 我编写了该插入排序来按字母顺序排序
  • 当用户在 Safari/Chrome 中关闭窗口时,我可以弹出确认对话框吗?

    在 IE 和 FF 中 我可以将事件处理程序附加到 onBeforeUnload 并通过将字符串传递给事件的属性 用户将看到一个对话框 询问他是否要继续 卸载 关闭窗口或导航离开 Safari 和 Chrome 不支持 onBeforeUn
  • 如何替换雪花中的重音字符?

    我正在尝试将列中的重音字符替换为 普通 字符 select 我想要一些会返回 aaaaaa 的操作 刚刚和我的一位同事找到了解决方案 select translate aeiouaoaeoac 我们还可以添加一个lower 使其推广到更多案
  • C++ 中的声明点

    为什么没有输出101当我分配了之前的x到新的x int x 101 int x x std cout lt lt x lt lt std endl 输出 垃圾 422634 我以为是第二个x将被初始化为101但它没有初始化 注 本例的解决方
  • 我还应该使用 Silverlight/XBAP

    我们需要创建一个可以通过浏览器使用但也可以离线使用的应用程序 我们的客户将使用浏览器版本进行计算 每个客户都需要使用用户名和密码登录应用程序 离线版本将由我们自己的员工使用 他们需要能够在未连接到网络的情况下使用此版本 应用程序所需的数据将
  • PHP 中的这个语法( page = $page ? $page : 'default' )是什么意思?

    我是 PHP 新手 我在中遇到了这个语法WordPress http en wikipedia org wiki WordPress 该代码的最后一行有什么作用 page SERVER REQUEST URI page str replac
  • 如何在WCF中返回数据集(xsd)

    我有一个库 它通过某种方法返回数据集 我需要通过 WCF 公开此数据集 客户端应用程序将使用它作为报告生成器 准确地说是 DevExpress XtraReport 的数据源 DataSet 包含大约 58 个 DataTable 其中包括
  • MySql 索引填充因子?

    在MySql中创建索引时如何指定填充因子 你不知道 http dev mysql com doc refman 5 0 en create index html http dev mysql com doc refman 5 0 en cr
  • 父子类关系设计模式

    我有一堂课 其中有一个子项目列表 是否有一个我可以复制的设计模式 可以应用于这些类 以便我可以从子级访问父级实例 并且它强制执行诸如无法将子级添加到多个父级等规则 尝试复合设计模式 https www dofactory com net c
  • Android GCM 发送成功,但在某些设备上未收到

    在服务器端 我使用Google提供的GCM服务器1 0 2库 在客户端 我按照提供的方式设置了 GCM官方文档 http developer android com google gcm client html 我的问题是 在大多数设备上一
  • 自定义 Mahapps.MetroWindow 关闭按钮

    我正在使用 Mahapps MetroWindow http mahapps com http mahapps com 来设计我的应用程序外观 现在我正在寻找自定义 X 关闭按钮外观的正确方法 默认情况下 MetroWindow 将自定义样