1

我的问题与类似。

但是,该线程中的答案对我不起作用,因为我使用 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。

4

0 回答 0