gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:57:56 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

我快速玩了一下,似乎设置了 Windows LeftTop设置 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);
}
}

Xml:
<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%

关于WPF - 通过考虑用户任务栏最大化无边框窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com