如何仅从顶部调整无边框窗口的大小?

时间:2016-08-27 14:49:41

标签: c# wpf resize borderless

我正在创建一个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>
    

    只获得一个带有顶部边框的窗口,但我无法调整它的大小。

    enter image description here

  • 然后我使用WindowChrome.ResizeGripDirection="Top"尝试ResizeMode="CanResizeWithGrip"

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

    这也不起作用(无法从顶部边框调整大小),并且夹点甚至不会出现在顶部。它保持在右下角(尽管如此,我可以调整大小)。

    enter image description here

  • This answer似乎应答者最初可能会这样做,但代码不可用。

  • This answer有一个指向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>
      
        

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

    • 代码落后:

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

      这给了我:

      enter image description here

      这可以从各个方向调整大小。我只 希望它能够从顶部调整大小。 (惊喜:我甚至没有将新的chrome对象分配给任何东西。这是怎么回事?这是我猜的另一个问题。

问题

如何制作 无边框 窗口, 可以使用 >顶部边框 ? (如果我只能使用可以改变颜色的顶部边框来做到这一点,那就最好了。)

1 个答案:

答案 0 :(得分: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>

这应该会生成一个看起来像最后一个的窗口,但只能从顶部调整大小(只能抓取顶部调整大小的句柄)。