99

ResizeMode="CanResizeWithGrip"WPF で設定するWindowと、以下のようにサイズ変更グリップが右下隅に表示されます。

WindowStyle="None"同様に設定すると、タイトル バーは消えますが、設定するまで灰色の斜めのエッジが残りますResizeMode="NoResize"。残念ながら、このプロパティの組み合わせを設定すると、サイズ変更グリップも表示されなくなります。

カスタムでWindowをオーバーライドしました。ウィンドウの境界線を自分で指定したいのですが、ユーザーが 4 つの側面すべてからウィンドウのサイズを変更できるようにする必要はありませんが、サイズ変更グリップが必要です。ControlTemplateStyle

誰かがこれらの基準をすべて満たす簡単な方法を詳しく説明できますか?

  1. Windowで指定した境界線以外に境界線を付けないでくださいControlTemplate
  2. 右下隅に機能するサイズ変更グリップがあります
  3. タイトル バーがありません。
4

5 に答える 5

192

AllowsTransparencyでプロパティを設定するとWindow(透明度の値を設定しなくても)、境界線が消え、グリップを介してのみサイズ変更できます。

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="640" Height="480" 
    WindowStyle="None"
    AllowsTransparency="True"
    ResizeMode="CanResizeWithGrip">

    <!-- Content -->

</Window>

結果は次のようになります。

于 2009-03-04T16:21:07.947 に答える
97

私は縁なしウィンドウを作成しようとして いましWindowStyle="None"たが、テストしたところ、上部に白いバーが表示されたようです。いくつかの調査の後、「境界線のサイズ変更」のように見えます。画像は次のとおりです(黄色でマークしました):

チャレンジ

インターネットでいくつかの調査を行い、多くの困難な非 xaml ソリューションを見つけた後、私が見つけたすべてのソリューションは C# のコード ビハインドと多くのコード行でした。ここで間接的に解決策を見つけました:最大カスタム ウィンドウがドロップ シャドウ効果を失う

<WindowChrome.WindowChrome>
    <WindowChrome 
        CaptionHeight="0"
        ResizeBorderThickness="5" />
</WindowChrome.WindowChrome>

: .NET 4.5 フレームワークを使用する必要があります。古いバージョンを使用している場合は、シェルを参照してShell:WindowChrome.WindowChrome代わりに使用してください。

Windowのプロパティを使用しましたWindowChrome。これを使用すると、白い「リサイズ ボーダー」が消えますが、正しく動作させるにはいくつかのプロパティを定義する必要があります。

CaptionHeight:これは、キャプション領域 (ヘッダーバー) の高さで、Aero スナップ、通常のタイトル バーのダブルクリック動作を可能にします。ボタンを機能させるには、これを 0 (ゼロ) に設定します。

ResizeBorderThickness:これは、ウィンドウのサイズを変更できるウィンドウの端の厚さです。私が 5 にしたのは、その数字が気に入ったからです。0 を入れると、ウィンドウのサイズを変更するのが難しくなるためです。

この短いコードを使用した後の結果は次のとおりです。

ソリューション

ResizeMode="NoResize"これで、とを使用せずに白い枠が消えAllowsTransparency="True"、ウィンドウに影が表示されます。

後で、シンプルで短いコードで簡単にボタンを機能させる方法を説明します (ボタンに画像は使用しませんでした)。チュートリアルを投稿します。

別の解決策があるかもしれませんが (私のような初心者には難しい解決策があることを知っています)、これは私の個人的なプロジェクトではうまくいきます。

ここに完全なコードがあります

<Window x:Class="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:Concursos"
    mc:Ignorable="d"
    Title="Concuros" Height="350" Width="525"
    WindowStyle="None"
    WindowState="Normal" 
    ResizeMode="CanResize"
    >
<WindowChrome.WindowChrome>
    <WindowChrome 
        CaptionHeight="0"
        ResizeBorderThickness="5" />
</WindowChrome.WindowChrome>

    <Grid>

    <Rectangle Fill="#D53736" HorizontalAlignment="Stretch" Height="35" VerticalAlignment="Top" PreviewMouseDown="Rectangle_PreviewMouseDown" />
    <Button x:Name="Btnclose" Content="r" HorizontalAlignment="Right" VerticalAlignment="Top" Width="35" Height="35" Style="{StaticResource TempBTNclose}"/>
    <Button x:Name="Btnmax" Content="2" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,0,35,0" Width="35" Height="35" Style="{StaticResource TempBTNclose}"/>
    <Button x:Name="Btnmin" Content="0" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,0,70,0" Width="35" Height="35" Style="{StaticResource TempBTNclose}"/>

</Grid>

ありがとうございました!

于 2016-03-28T08:50:19.327 に答える
5

サンプルはこちら:

<Style TargetType="Window" x:Key="DialogWindow">
        <Setter Property="AllowsTransparency" Value="True"/>
        <Setter Property="WindowStyle" Value="None"/>
        <Setter Property="ResizeMode" Value="CanResizeWithGrip"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">
                    <Border BorderBrush="Black" BorderThickness="3" CornerRadius="10" Height="{TemplateBinding Height}"
                            Width="{TemplateBinding Width}" Background="Gray">
                        <DockPanel>
                            <Grid DockPanel.Dock="Top">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition></ColumnDefinition>
                                    <ColumnDefinition Width="50"/>
                                </Grid.ColumnDefinitions>
                                <Label Height="35" Grid.ColumnSpan="2"
                                       x:Name="PART_WindowHeader"                                            
                                       HorizontalAlignment="Stretch" 
                                       VerticalAlignment="Stretch"/>
                                <Button Width="15" Height="15" Content="x" Grid.Column="1" x:Name="PART_CloseButton"/>
                            </Grid>
                            <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
                                        Background="LightBlue" CornerRadius="0,0,10,10" 
                                        Grid.ColumnSpan="2"
                                        Grid.RowSpan="2">
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition/>
                                        <ColumnDefinition Width="20"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="*"/>
                                        <RowDefinition Height="20"></RowDefinition>
                                    </Grid.RowDefinitions>
                                    <ResizeGrip Width="10" Height="10" Grid.Column="1" VerticalAlignment="Bottom" Grid.Row="1"/>
                                </Grid>
                            </Border>
                        </DockPanel>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
于 2011-11-26T14:02:58.457 に答える