RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 693603
Accepted
Egor Trutnev
Egor Trutnev
Asked:2020-07-18 18:46:00 +0000 UTC2020-07-18 18:46:00 +0000 UTC 2020-07-18 18:46:00 +0000 UTC

wpf 的样式关闭/最小化按钮

  • 772

该应用程序具有标准的最小化和关闭按钮。但他们不适合我。您需要制作自己的按钮。设置任务以制作具有透明背景的按钮。

应该是这样的:

在此处输入图像描述

当光标悬停时,背景颜色和图标发生变化:

在此处输入图像描述

开始做这样的实施:

<Window x:Class="ProgramProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ProgramProject"
        mc:Ignorable="d"
        Title="MainWindow" Height="421" Width="425" ResizeMode="NoResize" Background="{x:Null}" WindowStyle="None">
    <Grid>
        <Border CornerRadius="12">
            <Border.Background>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#2e75b6" Offset="0.5" />
                    <GradientStop Color="#1f4e79" Offset="1" />
                </LinearGradientBrush>
            </Border.Background>
        </Border>
        <Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="60" Stroke="Black" Opacity="0" VerticalAlignment="Top" Width="425" MouseLeftButtonDown="Rectangle1_PreviewMouseLeftButtonDown">
        <Grid Height="20" Margin="382,10,23,0" VerticalAlignment="Top" MouseDown="Grid1_MouseDown" >
            <Button Opacity="0" Content="" HorizontalAlignment="Left" Margin="-13,-10,-12,-8" VerticalAlignment="Top" Width="45" Height="38"/>
            <Path  Stretch="Fill" Fill="#FFFFFF" Data="F1 M 25.9166,22.1667L 37.9999,33.25L 49.0832,22.1668L 53.8332,26.9168L 42.7499,38L 53.8332,49.0834L 49.0833,53.8334L 37.9999,42.75L 26.9166,53.8334L 22.1666,49.0833L 33.25,38L 22.1667,26.9167L 26.9166,22.1667 Z " Margin="3.5,3.5,3.5,4.5"/>
        </Grid>
    </Grid>
</Window>

但是,由于我是 wpf 的新手,所以我有几个问题:

  1. 有没有比用代码画十字和棍子更简单的方法呢?也许这些按钮已经存在?
  2. 如何一次对 2 个对象执行样式更改?Internet 上有更改悬停按钮背景颜色的示例,但这些示例是悬停在按钮上的。在我的例子中,悬停可以触摸到按钮上的图标,而不是指针将在按钮后面的事实。
  3. 我做得对吗?将按钮和图标放在网格中?

我不希望任何人做出现成的示例(尽管我真的很感激一种实现的简单方法)。对我来说最主要的是被推上正确的道路,解释问题。

wpf
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    VladD
    2020-07-18T18:58:31Z2020-07-18T18:58:31Z

    首先,一切都不是更简单,而是更困难。

    如果你只是绘制按钮,那么它们就不会落入非客户区。因此,您必须将它们放在那里使用WindowChrome,例如,如这个问题中所述:WPF Creating a Custom Window Style with Shadow。

    然后,关于画十字。没有,WPF中没有内置的十字,因为每个系统都不一样(看看在Windows 7上的样子,在Windows 10上的样子),也取决于系统设置(选择配色方案,启用或不缩放模式和/或增加对比度等)。一条手绘十字线并不是太难的要求。

    我仍然会在按钮内打叉,然后更改模板:

    <Button Height="25" Width="25">
        <Button.Template>
            <ControlTemplate TargetType="Button">
                <Border x:Name="Bd" Background="Transparent">
                    <Path x:Name="Pt" Data="M0,0 M0.2,0.2 L 0.8,0.8 M0.2,0.8 L0.8,0.2 M1,1"
                          Stretch="Uniform" Stroke="Black" StrokeThickness="2"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="Bd" Property="Background" Value="Red"/>
                        <Setter TargetName="Pt" Property="Stroke" Value="White"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Button.Template>
    </Button>
    

    动画


    Offtopic:根据代码判断,您通过可视化编辑器编写 XAML。这会导致相当次优的代码,并将布局管理器排除在游戏之外。(例如,你在屏幕上放置一个按钮,结构如Margin="382,10,23,0"。不要这样做,手动使用布局管理器。)

    • 9

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5