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

でカスタム ウィンドウ スタイルを作成します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 に答える