WPF不透明蒙版在固定位置

时间:2010-12-11 22:15:39

标签: wpf xaml

我需要摆脱组件的一部分(使其完全透明),实际上是它底部的一个小条。 这是一个固定的大小,像25-30px,但问题是这个组件将调整很多,所以我不能只是将图像作为不透明蒙版。 (不同尺寸看起来很糟糕) 即使组件是300x300或1000x200,我也需要以某种方式消失底部25px。

我搜索了不透明蒙版和画笔,但没有运气,找不到将其停靠在组件底部的方法。

顺便说一下,不确定它是否重要但我正在讨论的组件是WPFChromium浏览器控件。

有没有办法通过不透明蒙板或像viewbox等来实现这个目的?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以使用LinearGradientBrush作为Control的OpacityMask并将Offset绑定到Control的ActualHeight,然后从该值中减去25并将其除以ActualHeight以获得以%为单位的值。这应该会给你底部的透明部分25px

<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();
    }
}