Непрозрачность маски от LinearGradientBrush с абсолютным градиентом Stops в Silverlight 3

Мой вопрос похож на этот.

Тем не менее, ответ в этой теме не работает для меня, потому что я использую 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.

0 ответов

Другие вопросы по тегам