Непрозрачность маски от 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.