-->

如何调整仅从顶一个无国界的窗口?(How to resize a borderless window

2019-09-27 19:08发布

我创建一个WPF应用程序,并希望我的窗口,是无国界的,而且还可以从顶部唯一的调整。

我至今尝试过

  • 我最初以为这会工作:

     <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> 

    做得到 ,只有顶部边框的窗口,但我无法调整它的大小。

  • 然后我试图WindowChrome.ResizeGripDirection="Top"ResizeMode="CanResizeWithGrip"

     <Window ... WindowStyle="None" ResizeMode="CanResizeWithGrip" AllowsTransparency="True" WindowChrome.ResizeGripDirection="Top" BorderThickness="0,5,0,0" BorderBrush="Black"> ... </Window> 

    这不工作,要么(无法从顶部边框来调整),以及抓地力甚至没有出现在上面。 它停留在右下角(我可以抓地调整,虽然)。

  • 这个答案似乎是回答者可能一开始这样做了,但代码是不可用的。

  • 这个答案有一个链接到一个博客帖子 ,我也不是太渴望尝试它,因为我想后面没有代码的解决方案。
  • 再有就是这个答案 :

    • 我得到这种方法的错误:

       <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> 

      属性“内容”设置不止一次。

    • 随着后面的代码:

       <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 。?对象的任何东西是怎么做的工作,这是另一个问题,我猜)。


如何让我只能上边框来调整一个无国界的窗口? (这是最好的,如果我能做到这一点,只有一个顶部边框,其颜色可以改变)。

Answer 1:

您可能有成功设置WindowChrome.ResizeBorderThickness属性删除除顶部,如所有边框ResizeBorderThickness="0, 5, 0, 0"

它可能不是实现你的结果最干净的方式,但我已经有一些成功的适应这里的答案: http://www.eidias.com/blog/2014/1/27/restyle-your-window (这是最简单的方法,我发现让WindowChrome工作):

创建一个自定义窗口样式ResourceDictionary

<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>

这应该产生看起来像你的最后一个窗口,但只能从上(只有前调整手柄可以抢下)调整。



文章来源: How to resize a borderless window from top only?