我的问题与此类似。
但是,该线程中的答案对我不起作用,因为我使用 LinearGradientBrush 作为不透明蒙版。
我有一个三行网格:
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
网格的内容在网格的顶部和底部(第一行和第三行)应该是半透明的。
我知道我不能使用剪辑,因为这不允许调整不透明度。所以我想我必须使用不透明蒙版。他们将图像或画笔作为内容,后者对于这个问题更有意义,但提出了如何将 GradientBrush 的偏移设置为网格高度的绝对值的问题。
另外,我正在使用 MVVM 模式。绑定偏移量不起作用,因为它不是从 FrameworkElement 派生的。我现在能看到的唯一解决方案是将完整的画笔绑定到我的视图模型,并在每次网格大小发生变化时对其进行调整。不太好,有没有更优雅的解决方案?
我想做的是这样的(RowDefinitions 和内容被跳过)
伪代码:
<Grid>
<Grid.OpacityMask>
<LinearGradientBrush StartPoint="0.5,1" EndPoint="0.5,0">
<LinearGradientBrush.GradientStops>
<GradientStop AbsoluteOffset="50" Color="#7F000000" />
<GradientStop AbsoluteOffset="*" Color="#00000000" />
<GradientStop AbsoluteOffset="50" Color="#7F000000" />
</LinearGradientBrush.GradientStops>
</Grid.OpacityMask>
</Grid>
我不能拆分网格或类似的东西,因为内容跨越三行。我猜 DrawingBrush 会很好地解决它,但这不是住在 SL 房子里。
我正在使用 Silverlight 3。