如何仅从顶部调整无边框 window 的大小?
How to resize a borderless window from top only?
我正在创建一个 WPF 应用程序并希望我的 window 是无边界的,并且还可以调整大小 仅从顶部开始。
到目前为止我尝试了什么
我最初认为这可行:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Width="200" Height="150"
WindowStyle="None"
ResizeMode="CanResize"
AllowsTransparency="True"
BorderThickness="0,5,0,0"
BorderBrush="Black">
<Grid Background="Gray" />
</Window>
我做得到一个只有上边框的window,但我不能调整它的大小。
然后我尝试 WindowChrome.ResizeGripDirection="Top"
和 ResizeMode="CanResizeWithGrip"
。
<Window ...
WindowStyle="None"
ResizeMode="CanResizeWithGrip"
AllowsTransparency="True"
WindowChrome.ResizeGripDirection="Top"
BorderThickness="0,5,0,0"
BorderBrush="Black">
...
</Window>
这也不起作用(无法从顶部边框调整大小),手柄甚至没有出现在顶部。它位于右下角(不过,我 可以 使用手柄调整大小)。
This answer貌似回答者一开始是这样做的,但是代码不可用。
- This answer has a link to a blog post,我不太想尝试,因为我想要一个没有代码隐藏的解决方案。
然后是this answer:
我在使用这种方法时遇到错误:
<Window ...
WindowStyle="None"
ResizeMode="CanResizeWithGrip"
AllowsTransparency="False">
<Grid Background="Gray" />
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CornerRadius="0"
GlassFrameThickness="1"
UseAeroCaptionButtons="False"/>
</Setter.Value>
</Setter>
</Window>
The property 'Content' is set more than once.
后面有代码:
<Window ...
WindowStyle="None"
ResizeMode="CanResize"
AllowsTransparency="False">
<Grid Background="Gray" />
</Window>
在构造函数中:
WindowChrome chrome = new WindowChrome();
chrome.CornerRadius = new CornerRadius(0);
chrome.GlassFrameThickness = new Thickness(0, 1, 0, 0);
chrome.UseAeroCaptionButtons = false;
这给了我:
并且可以从各个方向调整大小。而我只希望它能够从顶部调整大小。 (惊喜:我什至没有将新的 chrome
对象分配给任何东西。它是如何工作的?我猜这是另一个问题)。
问题
如何制作无边框window,仅 可以用 上边框 调整大小? (如果我可以只使用颜色可以更改的顶部边框来做到这一点,那就最好了)。
您可能已成功设置 WindowChrome.ResizeBorderThickness
属性 以删除除顶部以外的所有边框,例如ResizeBorderThickness="0, 5, 0, 0"
.
这可能不是获得结果的最简洁方法,但我在此处调整答案方面取得了一些成功:http://www.eidias.com/blog/2014/1/27/restyle-your-window(这是我发现让 WindowChrome
工作的最简单方法):
在 ResourceDictionary
中创建自定义 window 样式:
<ResourceDictionary x:Class="WpfApplication.WindowStyle"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="CustomWindowStyle" TargetType="{x:Type Window}">
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CaptionHeight="30"
CornerRadius="4"
GlassFrameThickness="0"
ResizeBorderThickness="0, 5, 0, 0"
UseAeroCaptionButtons="False" />
</Setter.Value>
</Setter>
<Setter Property="Window.BorderThickness" Value="0, 5, 0, 0" /
</Style>
</ResourceDictionary>
在需要的地方引用字典(我把它放在App.xaml):
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary Source="WindowStyle.xaml" />
</Application.Resources>
</Application>
参考所需的样式Window
:
<Window x:Class="WpfApplication1.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:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525"
Style="{StaticResource ResourceKey=CustomWindowStyle}">
<Grid>
</Grid>
</Window>
这应该会产生一个 window 看起来像你的最后一个,但只能从顶部调整大小(只能抓住顶部调整大小手柄)。
我正在创建一个 WPF 应用程序并希望我的 window 是无边界的,并且还可以调整大小 仅从顶部开始。
到目前为止我尝试了什么
我最初认为这可行:
<Window x:Class="WpfApplication3.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Width="200" Height="150" WindowStyle="None" ResizeMode="CanResize" AllowsTransparency="True" BorderThickness="0,5,0,0" BorderBrush="Black"> <Grid Background="Gray" /> </Window>
我做得到一个只有上边框的window,但我不能调整它的大小。
然后我尝试
WindowChrome.ResizeGripDirection="Top"
和ResizeMode="CanResizeWithGrip"
。<Window ... WindowStyle="None" ResizeMode="CanResizeWithGrip" AllowsTransparency="True" WindowChrome.ResizeGripDirection="Top" BorderThickness="0,5,0,0" BorderBrush="Black"> ... </Window>
这也不起作用(无法从顶部边框调整大小),手柄甚至没有出现在顶部。它位于右下角(不过,我 可以 使用手柄调整大小)。
This answer貌似回答者一开始是这样做的,但是代码不可用。
- This answer has a link to a blog post,我不太想尝试,因为我想要一个没有代码隐藏的解决方案。
然后是this answer:
我在使用这种方法时遇到错误:
<Window ... WindowStyle="None" ResizeMode="CanResizeWithGrip" AllowsTransparency="False"> <Grid Background="Gray" /> <Setter Property="WindowChrome.WindowChrome"> <Setter.Value> <WindowChrome CornerRadius="0" GlassFrameThickness="1" UseAeroCaptionButtons="False"/> </Setter.Value> </Setter> </Window>
The property 'Content' is set more than once.
后面有代码:
<Window ... WindowStyle="None" ResizeMode="CanResize" AllowsTransparency="False"> <Grid Background="Gray" /> </Window>
在构造函数中:
WindowChrome chrome = new WindowChrome(); chrome.CornerRadius = new CornerRadius(0); chrome.GlassFrameThickness = new Thickness(0, 1, 0, 0); chrome.UseAeroCaptionButtons = false;
这给了我:
并且可以从各个方向调整大小。而我只希望它能够从顶部调整大小。 (惊喜:我什至没有将新的
chrome
对象分配给任何东西。它是如何工作的?我猜这是另一个问题)。
问题
如何制作无边框window,仅 可以用 上边框 调整大小? (如果我可以只使用颜色可以更改的顶部边框来做到这一点,那就最好了)。
您可能已成功设置 WindowChrome.ResizeBorderThickness
属性 以删除除顶部以外的所有边框,例如ResizeBorderThickness="0, 5, 0, 0"
.
这可能不是获得结果的最简洁方法,但我在此处调整答案方面取得了一些成功:http://www.eidias.com/blog/2014/1/27/restyle-your-window(这是我发现让 WindowChrome
工作的最简单方法):
在 ResourceDictionary
中创建自定义 window 样式:
<ResourceDictionary x:Class="WpfApplication.WindowStyle"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="CustomWindowStyle" TargetType="{x:Type Window}">
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CaptionHeight="30"
CornerRadius="4"
GlassFrameThickness="0"
ResizeBorderThickness="0, 5, 0, 0"
UseAeroCaptionButtons="False" />
</Setter.Value>
</Setter>
<Setter Property="Window.BorderThickness" Value="0, 5, 0, 0" /
</Style>
</ResourceDictionary>
在需要的地方引用字典(我把它放在App.xaml):
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary Source="WindowStyle.xaml" />
</Application.Resources>
</Application>
参考所需的样式Window
:
<Window x:Class="WpfApplication1.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:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525"
Style="{StaticResource ResourceKey=CustomWindowStyle}">
<Grid>
</Grid>
</Window>
这应该会产生一个 window 看起来像你的最后一个,但只能从顶部调整大小(只能抓住顶部调整大小手柄)。