这OpacityMask
是一种方法,正如其他人已经建议的那样,但这有点具有挑战性,因为你不能OpacityMask
在画笔上设置一个。您只能在视觉上设置它 -OpacityMask
是在每个视觉的基础上完成的。但是Background
aListBox
不是可视树中的一个单独元素——它只是 的一个属性ListBox
,它通常是模板绑定到模板中Border
某处的元素之类的东西。
一些人在这里建议的位图效果的使用也是如此——这些效果也适用于整个视觉效果,而不是单个画笔。
但是,您可以使用 - 来处理这个问题,VisualBrush
它允许您使用可视树定义画笔。所以我认为这大致符合您的要求:
<Setter Property="Background" TargetName="Bd">
<Setter.Value>
<VisualBrush>
<VisualBrush.Visual>
<Rectangle Width="1" Height="1">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0,0" StartPoint="1,0">
<GradientStop Offset="0" Color="Transparent"/>
<GradientStop Offset="0.05" Color="{x:Static SystemColors.HighlightColor}"/>
<GradientStop Offset="0.95" Color="{x:Static SystemColors.HighlightColor}"/>
<GradientStop Offset="1" Color="Transparent"/>
</LinearGradientBrush>
</Rectangle.Fill>
<Rectangle.OpacityMask>
<LinearGradientBrush EndPoint="0,0" StartPoint="0,1">
<GradientStop Offset="0" Color="Transparent"/>
<GradientStop Offset="0.05" Color="White"/>
<GradientStop Offset="0.95" Color="White"/>
<GradientStop Offset="1" Color="Transparent"/>
</LinearGradientBrush>
</Rectangle.OpacityMask>
</Rectangle>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
不过,这些角落可能不是您想要的——取决于它们最终有多大。当你使用这种技术时,它们看起来并不特别圆。所以你可以沿着效果路线走。你可能更喜欢这个:
<Setter Property="Background" TargetName="Bd">
<Setter.Value>
<VisualBrush Viewbox="0.1,0.1,0.8,0.8">
<VisualBrush.Visual>
<Border Width="100" Height="100" CornerRadius="10"
Background="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}">
<Border.Effect>
<BlurEffect Radius="20"/>
</Border.Effect>
</Border>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
请注意,我使用的是Effect
a 而不是BitmapEffect
. 使用 的选项较少Effect
,但它们通常是更好的选择,因为它们设计用于在硬件中渲染。