1

我正在创建一个 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对象分配给任何东西。那是如何工作的?我猜这是另一个问题)。


问题

如何制作只能使用顶部边框调整大小的无边框窗口?(最好只使用可以更改颜色的顶部边框来执行此操作)。

4

1 回答 1

1

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

这可能不是实现您的结果的最干净的方法,但我已经成功地调整了这里的答案:http ://www.eidias.com/blog/2014/1/27/restyle-your-window (它是我发现WindowChrome工作的最简单方法):

在 a 中创建自定义窗口样式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>

这应该会产生一个看起来像您的最终窗口的窗口,但只能从顶部调整大小(只能抓住顶部调整大小手柄)。

于 2016-08-29T14:54:22.480 回答