我正在 WPF 中创建一个 UserControl 来模拟眼睛(如卡通眼睛),并将在眼睛内移动“瞳孔”(黑色圆圈)以朝某些方向看。我想使用眼睛的“白色”部分作为眼睛“黑色”部分的容器,这样黑色椭圆会在到达眼睛边缘时被剪掉,而不会只是漂浮在白色椭圆之外。
如何在 WPF/XAML 中执行此操作?
您可以使用Border
一个大CornerRadius
的作为眼睛的外部部分并在其上创建一个OpacityMask
以Border
确保内眼被夹到Border
快速示例:
<Window x:Class="WpfApplication9.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="121" Width="278" Name="UI">
<Grid Background="DarkGray" ClipToBounds="True">
<Border x:Name="opacityMask" CornerRadius="1000" Background="White" />
<Border CornerRadius="1000" Background="White" >
<Ellipse Width="50" Height="50" Fill="Black"/>
<Border.OpacityMask>
<VisualBrush Visual="{Binding ElementName=opacityMask}" />
</Border.OpacityMask>
</Border>
</Grid>
</Window>
结果: