OpacityMask от LinearGradientBrush с абсолютным градиентомStops в Silverlight 3 - PullRequest
1 голос
/ 15 июля 2010

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

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

...