以下代码应该在圆角容器内绘制菜单栏。您会注意到底部是圆形的,但菜单的角不是。我按照所选答案的指示,因为它似乎是最有效的:
How do I create a WPF Rounded Corner container?
为了记录,我使用最新版本的WPF运行.NET 4.5。这是我的代码:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="240" Height="320" Background="Black" >
<Border BorderBrush="Red" CornerRadius="10" BorderThickness="1" Background="Gray" >
<StackPanel>
<Menu IsMainMenu="True" HorizontalAlignment="Stretch" >
<MenuItem Header="_File" />
<MenuItem Header="_Edit" />
<MenuItem Header="_View" />
<MenuItem Header="_Window" />
<MenuItem Header="_Help" />
</Menu>
</StackPanel>
</Border>
</Window>
修改 在同一篇文章中还有另一个答案,表明Chris Cavanagh提出了一个更复杂的解决方案。他的解决方案并不是那么简单或快速,但它确实可以剪掉我想要的角落。问题没有指明剪辑,建议的答案也没有。希望问题和/或答案能够更新以反映这一点。
答案 0 :(得分:2)
克里斯卡瓦纳有一个关于舍入控制的blog post。它应该可以帮助你实现你想要的目标。
修改强> 以下是该博客的代码。
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="Black">
<!-- Rounded yellow border -->
<Border BorderThickness="3" BorderBrush="Yellow" CornerRadius="10" Padding="2" HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid>
<!-- Rounded mask (stretches to fill Grid) -->
<Border Name="mask" Background="White" CornerRadius="7"/>
<!-- Main content container -->
<StackPanel>
<!-- Use a VisualBrush of 'mask' as the opacity mask -->
<StackPanel.OpacityMask>
<VisualBrush Visual="{Binding ElementName=mask}"/>
</StackPanel.OpacityMask>
<!-- Any content -->
<Image Source="https://chriscavanagh.files.wordpress.com/2006/12/chriss-blog-banner.jpg"/>
<Rectangle Height="50" Fill="Red"/>
<Rectangle Height="50" Fill="White"/>
<Rectangle Height="50" Fill="Blue"/>
</StackPanel>
</Grid>
</Border>
</Page>
它所做的只是包含一个'mask'Edgeal元素作为你要剪辑的内容的兄弟。在内容中,它使用绑定到该掩码的VisualBrush。面具将根据您的内容自动调整大小,因此这是一个很好的“设置并忘记”解决方案