Как слить изображение в фон по двум краям?

Я пытаюсь создать стильный эффект в своем приложении, который позволяет изображению располагаться в верхнем правом углу с левым и нижним краями, сливаясь с цветом фона, используя Image.OpacityMask, Что-то вроде:

введите описание изображения здесь

Это можно сделать с помощью следующего кода, кроме Image.OpacityMask допускается только для одного ребенка LinearGradientBrush:

    <Image Source="Images/poster.jpg" Width="300">
        <Image.OpacityMask>
            <LinearGradientBrush StartPoint="1, 0.5" EndPoint="0, 0.5">
                <GradientStop Color="Black" Offset="0.2" />
                <GradientStop Color="Transparent" Offset="1.0" />
            </LinearGradientBrush>
            <LinearGradientBrush StartPoint="0.5, 0" EndPoint="0.5, 1">
                <GradientStop Color="Black" Offset="0.2" />
                <GradientStop Color="Transparent" Offset="1.0" />
            </LinearGradientBrush>
        </Image.OpacityMask>
    </Image>

Как я могу создать Image.OpacityMask как это с действительным кодом? Я знаю, что есть RadialGradientBrush, но это смешало бы все изображение, а не только левый и нижний края.

1 ответ

Решение

Вы можете использовать два элемента, например, изображение на границе:

<Border HorizontalAlignment="Right" VerticalAlignment="Top" Width="300">
    <Border.OpacityMask>
        <LinearGradientBrush StartPoint="1, 0.5" EndPoint="0, 0.5">
            <GradientStop Color="Black" Offset="0.2" />
            <GradientStop Color="Transparent" Offset="1.0" />
        </LinearGradientBrush>
    </Border.OpacityMask>
    <Image Source="Images/poster.jpg">
        <Image.OpacityMask>
            <LinearGradientBrush StartPoint="0.5, 0" EndPoint="0.5, 1">
                <GradientStop Color="Black" Offset="0.2" />
                <GradientStop Color="Transparent" Offset="1.0" />
            </LinearGradientBrush>
        </Image.OpacityMask>
    </Image>
</Border>
Другие вопросы по тегам