2010-12-11 51 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