web-dev-qa-db-ja.com

WPFで角の丸いフォームを作成するにはどうすればよいですか?

ウィンドウ(WPF)の角を丸くしようとしていますが、機能しません。ウィンドウ自体を透明にして、角の丸い内部境界線を追加しようとしましたが、機能しません。

何か案は?

32
Shimmy

クロムを削除するWindowStyle.NoneにWindowStyleを設定する必要があります。次に、Window要素の属性である透明度を許可し、背景色を透明に設定できます。これはすべて、ウィンドウタグの属性として実行できます。

WindowStyle="None"
AllowsTransparency="True"
Background="Transparent"

角を丸くするには、境界線を使用して、cornerRadiusプロパティを設定します

33
CodeMonkey1313

遅くてバグが多いAllowsTransparencyを使用しないでください。このリンクを見て、「Aeroを使用しないOffice 2007 –または、すべての責任を負う」セクションを探してください。

https://blogs.msdn.Microsoft.com/wpfsdk/2008/09/08/custom-window-chrome-in-wpf/

編集:この投稿の一部の手法はVistaに固有のものですが、「AeroなしのOffice 2007」セクションはXPで機能します(実際には、Vista用に作成されたソフトウェアがどのようなものかを説明しています) XPに戻します)。

4
Nir

また、ウィンドウの周りに数ピクセル幅の透明な境界線を作成する必要があります。そうしないと、丸い角の端が切り取られます。

2
Ana Betts

それはあなたを助けるかもしれません。

<Grid DataContext="{Binding ElementName=root}">
    <Border Background="#90000000" Visibility="{Binding Visibility}">
        <Border BorderBrush="Black" BorderThickness="1" Background="AliceBlue" 
                CornerRadius="10,0,10,0" VerticalAlignment="Center"
                HorizontalAlignment="Center">
            <Border.BitmapEffect>
                <DropShadowBitmapEffect Color="Black" 
                  Opacity="0.5" Direction="270" 
                  ShadowDepth="0.7" />
            </Border.BitmapEffect>
            <Grid Margin="10">
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <TextBlock x:Name="MessageTextBlock" 
                    Text="{Binding Message}" 
                    TextWrapping="Wrap" Margin="5" />
                <UniformGrid Grid.Row="1" Margin="5" 
                          Columns="2" HorizontalAlignment="Center"
                          VerticalAlignment="Bottom">
                    <Button x:Name="OkButton"  
                          Content="Ok" Margin="2"  />
                    <Button x:Name="CancelButton" 

                          Content="Cancel" Margin="2" />
                </UniformGrid>
            </Grid>
        </Border>
    </Border>
</Grid>
2
Mou