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