WPF - 通过考虑用户任务栏来最大化无边框窗口

2023-11-30

我正在使用自定义镶边创建一个 WPF 窗口,所以我设置ResizeMode="NoResize" and WindowStyle="None"实现我自己的 chrome。然而,最大化无边框窗口时存在一个问题:它占据了整个屏幕。

我发现以下技巧可以解决部分问题:http://chiafong6799.wordpress.com/2009/02/05/maximizing-a-borderlessno-caption-window/

这成功地限制了窗口大小以防止覆盖任务栏。但是,如果用户将任务栏定位在左侧或顶部,则这将不起作用,因为窗口位于位置 0,0。

有什么方法可以更准确地检索可用区域,或者查询用户任务栏的位置,以便我可以相应地定位最大化窗口?


我快速玩了一下,似乎设置了Windows Left and Top设置时忽略属性WindowState.Maximized具有无边框形式。

一种解决方法是忽略WindowState函数并创建您自己的Maximize/Restore功能

粗略的例子。

public partial class MainWindow : Window
{
    private Rect _restoreLocation;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void MaximizeWindow()
    {
        _restoreLocation = new Rect { Width = Width, Height = Height, X = Left, Y = Top };
        System.Windows.Forms.Screen currentScreen;
        currentScreen = System.Windows.Forms.Screen.FromPoint(System.Windows.Forms.Cursor.Position);
        Height = currentScreen.WorkingArea.Height;
        Width = currentScreen.WorkingArea.Width;
        Left = currentScreen.WorkingArea.X;
        Top = currentScreen.WorkingArea.Y;
    }

    private void Restore()
    {
        Height = _restoreLocation.Height;
        Width = _restoreLocation.Width;
        Left = _restoreLocation.X;
        Top = _restoreLocation.Y;
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        MaximizeWindow();
    }

    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
        Restore();
    }

    protected override void OnMouseMove(MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            DragMove();
        }
        base.OnMouseMove(e);
    }
}

Xaml:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="74.608" Width="171.708" ResizeMode="NoResize" WindowStyle="None">
    <Grid>
        <Button Content="Max" HorizontalAlignment="Left" Margin="0,29,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
        <Button Content="Restore" HorizontalAlignment="Left" Margin="80,29,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_2"/>
    </Grid>
</Window>

显然你会想要清理这段代码,但它似乎在任何地方都可以工作Taskbar位于,但是您可能需要添加一些逻辑才能获得正确的Left, Top如果用户字体 DPI 大于 100%

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

WPF - 通过考虑用户任务栏来最大化无边框窗口 的相关文章

  • 如何使 WPF 中的窗口对鼠标事件不可见?

    我创建了这个类 它非常适合使我的 WPF 应用程序对鼠标事件透明 using System Runtime InteropServices class Win32 public const int WS EX TRANSPARENT 0x0
  • 根据值更改 DataGrid 单元格颜色

    我有一个 WPF 数据网格 我想要根据值使用不同的单元格颜色 我的 xaml 上有以下代码 Style TargetType DataGridCell 但不是只选择一个单元格而是选择所有行 我缺少什么 如果您尝试设置DataGrid Cel
  • MVVM ViewModel 很多属性

    我是 MVVM 新手 正在开发一个应用程序 我有一个包含很多属性的表单视图 大约 50 个 我不能将它们分离到用户控件中 因为这会破坏 mvvm 原则 我无法将它们分成模型 因为它们包含逻辑 属性更改 错误更改这些都不是 poco 类 并且
  • 使用 XAML 文件作为矢量图像源

    我希望能够使用矢量图形 最好在 XAML 中定义 作为图像控件的源 就像我当前可以使用 PNG 等光栅图像一样 这样我就可以轻松地混合和匹配位图和矢量图像 如下所示
  • WPF DataGrid 排序后滚动到顶部

    我有一个使用数据网格的 Net 4 0 WPF 应用程序 目前 按列排序后 网格的滚动位置保持在排序前的位置 对于此应用程序 我需要在任何排序后滚动到网格顶部 我尝试过像这样处理排序事件 Private Sub myDataGrid Sor
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • WPF Treeview,如何更改缩进

    我的树视图基本上有 文件夹 节点 以及不包含其他项目的项目下面的一层 因此 不需要用于展开 折叠图标的空间 在第 2 层 我可以放弃这个图标空间从而减少缩进吗 项目 在示例 机场 中 应向左移动一些像素 重要提示 基本上是寻找代码解决方案
  • Brush 属性的 WPF ColorAnimation

    我想知道是否有人可以帮助我 我有一个标签 当在后面的代码中调用方法时 我需要能够在任意两种颜色之间交叉淡入淡出 迄今为止我最好的尝试 Private OldColor as Color Colors White Sub SetPulseCo
  • 内容更新时自动调整列表视图列的大小

    我试图让列表视图中的 gridviewcolumns 在更新绑定源 视图模型上的可观察集合 时自动调整内容大小 列表视图填充正常 但当我刷新 更新集合时不起作用 这是我到目前为止正在尝试的解决方案 XAML
  • 如何在Phone类库项目中添加ResourceDictionary并访问它

    我正在开发一个项目 其中我有一个引用图书馆项目的子项目 在我的库项目 电话类库 中 如何创建 ResourceDictionary xaml 其中我需要添加一些样式并在 xaml 文件和 cs 文件中使用它 我需要访问 xaml 文件中的
  • ListView.GridViewColumn 对齐中的控制

    我有以下 WPF ListView
  • 如何使用故事板更改wpf中网格行的高度

    我有一个Grid有 2 行
  • 如何识别单击的按钮属于哪个列表框项?

    在 WPF 编程中 我在编写按钮单击事件处理程序时遇到问题 因为该按钮位于列表框项目 数据模板的一部分 内 当单击该按钮时 我无法判断它属于哪个项目 有什么解决办法吗 求救 您似乎已将列表框绑定到集合 并且您的按钮是数据模板或项目模板的一部
  • 将 ARGB 拆分为字节值

    我有一个 ARGB 值存储为 int 类型 它是通过调用 ToArgb 来存储的 我现在想要来自 int 值的各个颜色通道的字节值 例如 int mycolor 16744448 byte r g b a GetBytesFromColor
  • GridViewColumn 中的 WPF 文本格式设置

    我想将格式 对齐文本 货币格式 0000 00 应用于 GridViewColumn 中的列
  • 使用backgroundworker手动停止调试

    我正在编写一个 WPF C 项目 使用BackgroundWorker 带有进度条的弹出窗口 我开始调试 F5 键 来检查我的程序 之后BackgroundWorker完成并关闭弹出窗口 关闭MainWindow不会自动停止调试过程 我必须
  • WPF PRISM 事件订阅不会消亡

    我有一个 PRISM RegionManager 其中有几个区域 顶部的功能区区域和其下方用于我的视图的主要内容区域 相当基本 该应用程序以主要内容区域中的 主页 视图开始 当我单击功能区上的按钮时 我将第二个视图注入内容区域并在区域管理器
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时

随机推荐

  • 如何在 OPENGL 中旋转或平移单个对象实例?

    假设我有一个有四个立方体的场景 我该如何说在 OpenGL 中仅旋转 平移其中两个立方体而不使用 glrotatef 和 f gltranslate 更改其他立方体 我不想定义我自己的齐次坐标 像往常一样绘制前两个立方体 推入视图模型矩阵
  • iPhone 上的点击延迟和抑制输入焦点

    iPhone 上的 webkit 浏览器在用户进行触摸和 javascript 获取单击事件之间有 300 毫秒的延迟 发生这种情况是因为浏览器需要检查用户是否进行了双击 我的应用程序不允许缩放 因此双击对我来说毫无用处 有不少人有提出的解
  • 如何安全地调用 vsnprintf() ?

    我正在将一些非常古老 gt 10 年 的 C 代码移植到现代 Linux 我在自定义编写的 vsnprintf 包装器中遇到分段错误 显然它的任务是检测重复的输出字符串并实习它们 char strVPrintf const String f
  • Oracle中的查询通过子查询进行选择

    我的 Oracle 数据库中有下表 CREATE TABLE test flight NUMBER 4 date DATE action VARCHAR2 50 CONSTRAINT pk PRIMARY KEY flight date 以
  • 为什么 Glimpse 仍在运行?

    我瞥见了 defaultRuntimePolicy Off 但它仍然显示这样的错误 Unable to define EFProfiledDbProviderServices class of type GlimpseDbProviderS
  • 使用 TensorFlow Benchmark 对 Keras 模型进行基准测试

    我正在尝试使用 TensorFlow 后端对 Keras 模型构建的推理阶段的性能进行基准测试 我当时想的是张量流基准测试工具是正确的方法 我已经成功地在桌面上构建并运行了示例tensorflow inception graph pb一切似
  • 为什么我的 WM_UNICHAR 处理程序从未被调用?

    我有一个 ATL 控件 我希望它能够识别 Unicode 我为 WM UNICHAR 添加了一个消息处理程序 MESSAGE HANDLER WM UNICHAR OnUniChar 但是 由于某种原因 OnUniChar 处理程序永远不会
  • 如何使用 java.util.stream 处理文件块

    为了熟悉流 api 我尝试编写一个非常简单的模式 Problem 拥有一个包含非嵌套文本块的文本文件 所有块均由开始 结束模式标识 例如
  • 我可以同时安装 Powershell 4 和 Powershell 3 吗?

    我的盒子上安装了 Powershell 3 我需要使用 Powershell 4 测试一些脚本 但我想继续运行在 Powershell 3 下测试的一些脚本 并且我不想通过安装 Powershell 4 来破坏某些内容 QUESTION 尽
  • Spark Streaming + json4s-jackson 依赖问题

    我无法在我的 Spark 1 4 1 流应用程序中使用 json4s Jackson 3 2 11 认为是 Spark Core 项目中现有的依赖关系导致了问题 如此处所述 gt 是否可以将 json4s 3 2 11 与 Spark 1
  • Python:如何OCR水平线交叉的字符

    我有一批想要扫描的图像 其中一些有一条水平线穿过必须扫描的字符 如下所示 我编写了一个能够删除水平线的程序 import cv2 import numpy as np img cv2 imread image jpg 0 Applies t
  • 如何约束迭代器的元素类型?

    我正在将一些较旧的 Rust 代码转换为在 1 0 0 上运行 我需要转换一个采用字符迭代器的函数 该函数过去是这样写的 fn f
  • 如何根据Python中数据集的最佳拟合确定微分方程的未知参数?

    我正在尝试使用 python 将不同的微分方程拟合到给定的数据集 因此 我分别使用 scipy 包和solve ivp 函数 只要我对微分方程中包含的参数 b 0 005 有一个粗略的估计 这对我来说就很好 例如 import matplo
  • Android自定义形状

    I know it is possible to make a shape looking something like this 但我不知道如何开始 我可以把它做成一个形状吗 或者我必须做别的事情吗 BR 哦 看看那个 我错了 渐变不是问
  • 多次按键无法解决左侧和空间问题?

    I have a strange problem when I press up left arrows and space simultaneously Why doesn t the space work I tried to test
  • 使用 pvfactors 库时出现“OSError: [WinError 126] 找不到指定的模块”

    我开始按照网站教程使用 Python 中的 pvfactors 工具 它计算光伏阵列表面上的辐照度入射 1 import numpy as np import matplotlib pyplot as plt from datetime i
  • 如何创建 const boost::iterator_range

    评论于为什么 boost find first 对它的输入采用非常量引用 建议 调用者使用 const iterator 模板参数创建一个非常量 iterator range 以 证明 迭代对象具有足够的生命周期 这是什么意思以及我该怎么做
  • 刷新后保持选项处于选中状态

    我有一个按插入选择中的两个参数排序的人员列表 当有人选择一个参数时 如何在刷新或更改 返回页面时保持该参数的选择 我在互联网上的一些帖子上看到了一些问题 但大多数都使用 JQuery 而我不想使用它 代码是这样的
  • Firebase 使用 java(非 android)检索信息

    我一直在尝试使用 java 代码 非 android 获取 firebase 数据库的数据 我使用了与在 android 应用程序中检索相同的方法 但它没有获取数据 Firebase firebase new Firebase https
  • WPF - 通过考虑用户任务栏来最大化无边框窗口

    我正在使用自定义镶边创建一个 WPF 窗口 所以我设置ResizeMode NoResize and WindowStyle None 实现我自己的 chrome 然而 最大化无边框窗口时存在一个问题 它占据了整个屏幕 我发现以下技巧可以解