Как сделать форму с закругленными углами в WPF? - PullRequest
32 голосов
/ 17 марта 2009

Я пытаюсь сделать углы окна (WPF) округленными, и это не работает, я попытался сделать само окно прозрачным и добавить внутреннюю границу с закругленными углами, и оно не работает.

Есть идеи?

Ответы [ 4 ]

33 голосов
/ 17 марта 2009

вам нужно установить WindowStyle на WindowStyle.None, который удалит хром, затем вы можете разрешить прозрачность, которая является атрибутом элемента Window, и установить цвет фона на прозрачный. Все это можно сделать как атрибуты тега окна.

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

Чтобы скруглить углы, используйте рамку и установите свойство cornerRadius

4 голосов
/ 17 марта 2009

Не используйте AllowsTransparency, это медленно и глючно, посмотрите на эту ссылку, поищите раздел «Office 2007 без Aero - Или вы несете ответственность за все»:

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

РЕДАКТИРОВАТЬ: некоторые из методов в этом посте являются специфическими для Vista, но раздел «Office 2007 без Aero» работает на XP (и фактически описывает, какое программное обеспечение, написанное для Vista, должно использовать XP).

2 голосов
/ 18 марта 2013

это может помочь вам.

<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 голосов
/ 17 марта 2009

Вам также нужно сделать прозрачную рамку вокруг окна шириной в несколько пикселей, иначе края ваших закругленных углов будут обрезаны

...