我的问题类似于this one。
然而,该线程中的答案对我不起作用,因为我使用LinearGradientBrush作为不透明蒙版。
我有一个有三行的网格:
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
网格的内容应该在网格的顶部和底部(第一行和第三行)半透明。
我知道我不能使用剪辑,因为这不允许可调整的不透明度。所以我想我必须使用不透明面具。它们将图像或画笔作为内容,后者对此问题更有意义,但提出了如何将GradientBrush的偏移设置为gridrow高度的绝对值的问题。
另外,我正在使用MVVM模式。绑定偏移量不起作用,因为它不是派生自FrameworkElement。我现在能看到的唯一解决方案是将完整的画笔绑定到我的viewmodel,并在每次网格大小改变时调整它。不太好,是否有更优雅的解决方案?
我想做的是这样的事情(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。