2010-12-11 10 views
1

コンポーネントの一部を取り除く(完全に透明にする)必要があります。実際にはその下部に小さなバーがあります。 これは25-30pxのような固定サイズですが、問題はこのコンポーネントが大きくサイズ変更されるため、不透明マスクとしてイメージを置くことができないことです。 (異なるサイズで見栄えが悪くなります) コンポーネントが300x300または1000x200であっても、私は何とか底部の25ピクセルが消えるようにする必要があります。固定位置のWPF不透明マスク

不透明度マスク&描画ブラシが検索されましたが、運がないため、コンポーネントの下部にドッキングする方法が見つかりません。

ちなみに重要なのかどうかわかりませんが、私が話しているコンポーネントはWPFChromiumブラウザコントロールです。

不透明マスクやビューボックスなどでこれを達成する方法はありますか?

ありがとうございます!

答えて

1

コントロールのOpacityMaskとしてLinearGradientBrushを使用し、コントロールのActualHeightにオフセットをバインドし、値から25を引いてActualHeightで除算すると、%で値を取得できます。これはボトム

<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> 

であなたに25ピクセルの透明な部分を与える必要があります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