2010-12-11 58 views
1

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

我搜索了不透明面具&绘图刷但没有运气,找不到方法将其停靠在组件底部。顺便说一下,不知道它是否重要,但我所说的组件是WPFChromium浏览器控件。

有没有办法通过不透明面具或类似viewbox等来实现这一点?

在此先感谢!

回答

1

您可以使用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(); 
    } 
} 
+0

啊就像一个魅力,非常感谢你! – Tiax 2010-12-12 16:41:03