来自LinearGradientBrush的OpacityMask与Silverlight 3中的Absolute GradientStops

时间:2010-07-14 20:04:57

标签: silverlight pixel lineargradientbrush opacitymask gradientstop

我的问题类似于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。

0 个答案:

没有答案