Silverlight 3 中具有绝对 GradientStops 的 LinearGradientBrush 的 OpacityMask

发布于 2024-09-09 07:36:11 字数 1365 浏览 7 评论 0原文

我的问题类似于这个

但是,该线程中的答案对我不起作用,因为我使用 LinearGradientBrush 作为不透明蒙版。

我有一个包含三行的网格:

<Grid.RowDefinitions>
    <RowDefinition Height="50" />
    <RowDefinition Height="*" />
    <RowDefinition Height="50" />
</Grid.RowDefinitions>

网格的内容在网格的顶部和底部(第一行和第三行)应该是半透明的。

我知道我不能使用剪切,因为这不允许调整不透明度。所以我想我必须使用不透明蒙版。他们将图像或画笔作为内容,后者对于这个问题更有意义,但提出了如何将 GradientBrush 的偏移设置为网格行高度的绝对值的问题。

另外,我正在使用 MVVM 模式。绑定偏移量不起作用,因为它不是从 FrameworkElement 派生的。我现在能看到的唯一解决方案是将完整的画笔绑定到我的视图模型,并在每次网格大小变化时调整它。不太好,有更优雅的解决方案吗?

我想做的是这样的(行定义和跳过的内容)

伪代码

<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。

My question is similar to this one.

However, the answer in that thread does not work for me, because I'm using the LinearGradientBrush for an opacity mask.

I've got a grid with three rows:

<Grid.RowDefinitions>
    <RowDefinition Height="50" />
    <RowDefinition Height="*" />
    <RowDefinition Height="50" />
</Grid.RowDefinitions>

The content of the grid should be semi-transparent at the top and the bottom of the grid (the first and third row).

I understand I can't use clipping, because that does not allow for adjustable opacity. So I guess I have to go with opacity masks. They take images or brushes as content, the latter of which makes more sense for this problem, but raises the question of how to set the offset of the GradientBrush to the absolute value of the gridrow's height.

Also, I'm using the MVVM pattern. Binding the offset does not work because it doesn't derive from FrameworkElement. The only solution I can see right now would be to bind the complete brush to my viewmodel, and adjust it every time the grid's size changes. Not too nice, is there a more elegant solution?

What I'd like to do is something like this (RowDefinitions and content skipped)

pseudo code:

<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>

I can't split the grid or anything like that, because the content spans the three rows. DrawingBrush would solve it nicely I guess, but that's not living in the SL house.

I'm using Silverlight 3.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文