WPF Opacity Mask в фиксированном месте - PullRequest
1 голос
/ 12 декабря 2010

Мне нужно избавиться от части компонента (сделать его полностью прозрачным), маленькую полоску внизу. Это фиксированный размер, примерно 25-30 пикселей, но проблема в том, что этот компонент будет сильно изменен, поэтому я не могу просто поместить изображение в качестве маски непрозрачности. (который будет выглядеть плохо при разных размерах) Даже если компонент 300x300 или 1000x200, мне нужно, чтобы нижние 25 пикселей как-то исчезли.

Я искал маску непрозрачности и кисть для рисования, но не повезло, не могу найти способ закрепить его внизу компонента.

Кстати, не уверен, имеет ли это значение, но компонент, о котором я говорю, - это управление браузером WPFChromium.

Есть ли способ добиться этого с помощью маски непрозрачности или чего-то вроде viewbox и т. Д.?

Заранее спасибо!

1 Ответ

1 голос
/ 12 декабря 2010

Вы можете использовать LinearGradientBrush в качестве OpacityMask для элемента управления и привязать смещение к ActualHeight элемента управления, а затем вычесть 25 из значения и разделить его на ActualHeight, чтобы получить значение в%. Это должно дать вам прозрачную часть 25 пикселей в нижней части

<WebBrowser Name="webBrowser">
    <WebBrowser.OpacityMask>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
            <GradientStop Color="#FFFF0000"
                          Offset="{Binding ElementName=webBrowser,
                                           Path=ActualHeight,
                                           Converter={StaticResource OffsetConverter},
                                           ConverterParameter=25}"/>
            <GradientStop Color="#00000000"
                          Offset="{Binding ElementName=webBrowser,
                                           Path=ActualHeight,
                                           Converter={StaticResource OffsetConverter},
                                           ConverterParameter=25}"/>
        </LinearGradientBrush>
    </WebBrowser.OpacityMask>
</WebBrowser>

OffsetConverter

public class OffsetConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        double height = (double)value;
        double subract = System.Convert.ToDouble(parameter.ToString());
        double opacityMaskHeight = height - subract;
        return opacityMaskHeight / height;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...