私の質問はこれに似ています。
ただし、不透明マスクに LinearGradientBrush を使用しているため、そのスレッドの答えはうまくいきません。
私は3行のグリッドを持っています:
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
グリッドのコンテンツは、グリッドの上部と下部 (1 行目と 3 行目) で半透明にする必要があります。
不透明度を調整できないため、クリッピングを使用できないことを理解しています。したがって、不透明マスクを使用する必要があると思います。これらは画像またはブラシをコンテンツとして受け取りますが、後者の方がこの問題には適していますが、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>
コンテンツが 3 つの行にまたがっているため、グリッドなどを分割することはできません。DrawingBrush はそれをうまく解決すると思いますが、それは SL の家に住んでいるわけではありません。
Silverlight3 を使用しています。