如何在WPF中创建圆角形式?

时间:2009-03-17 15:04:56

标签: wpf rounded-corners

我试图使窗口(WPF)的角落圆形并且它不起作用,我试图使窗口本身透明并添加带圆角的内部边框,但它不起作用。

有什么想法吗?

5 个答案:

答案 0 :(得分:33)

您需要将WindowStyle设置为WindowStyle.None,这将删除镶边,然后您可以允许透明度是Window元素中的属性,并将背景颜色设置为透明。所有这些都可以作为窗口标记的属性来完成。

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

要使角变圆,请使用边框并设置cornerRadius属性

答案 1 :(得分:4)

不要使用AllowTransparency它很慢而且有错误,看看这个链接,查找“没有Aero的Office 2007 - 或者,你负责一切”:

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

编辑:本文中的一些技术是针对Vista的,但“没有Aero的Office 2007”部分适用于XP(实际上描述了为Vista编写的软件必须在XP上回归)。

答案 2 :(得分:2)

您还需要在窗口周围创建几个像素宽的透明边框,否则圆角的边缘会被切掉

答案 3 :(得分:2)

它可能对你有帮助。

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

答案 4 :(得分:0)

我通过Windows.Clip解决了这个问题。

border-radius=50%; 

但是我认为最好的方法是使用WindowChrome。您可以相对容易地解决调整大小的问题。我还没有完全了解这项技术。所以我现在不能发布工作解决方案。但这将持续到2020年10月1日。 目前,这里的链接似乎有用。 MS-Docs ChromeClass