2012-09-28 25 views
19

内部の子コントロールに影響を与えずに、WPFウィンドウの背景の不透明度を変更する方法を知りたかったのですが。ウィンドウのプロパティ '不透明度'を0.5に変更すると半透明のウィンドウが表示されますが、ウィンドウ内の画像も0.5の不透明度値を継承しています。コンテンツの不透明度を変更せずに背景の不透明度を変更する

+0

これが可能かどうかを確認するにはちょうどいいと思うが、そうではないと思う。 「透明」に設定し、残りのオブジェクトに影響を与えない半透明の矩形などを追加しようとしましたか? – NestorArturo

答えて

30

ウィンドウはすべての親コンテナです。したがって、ウィンドウの不透明度を設定すると、そのウィンドウに含まれるすべてのものに影響します。あなたがしたいことは、Window.BackgroundOpacityを変更することだと思います。

ウィンドウの透明化を有効にするには、追加する必要があります。まず、Window.AllowsTransparency = Trueを設定し、Window.WindowStyle = Noneを設定する必要があります。 WindowStyle.Noneは、ウィンドウクロムの最小化、最大化、および閉じるボタンなしでウィンドウを作成するので、ウィンドウサイズの変更と移動に加えて、アプリケーションでそれを処理する必要があります。すべての作業が完了したら、Window.BackgroundOpacityのブラシを設定することができます。

次のコードサンプルは、ウィンドウを常に透明にし、ウィンドウの背景の不透明度を異なる不透明度に設定する方法を示します。

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     x:Class="WpfApplication1.MainWindow" 
     x:Name="Window" 
     WindowStyle="None" 
     AllowsTransparency="True"> 
    <Window.Background> 
     <SolidColorBrush Color="White" Opacity="0.5"/> 
    </Window.Background> 
    <Grid> 
     <!--Window Content--> 
    </Grid> 
</Window> 

ウィンドウ内の要素のみを表示する場合は、常にウィンドウの背景を透明に設定できます。

+0

スタイルテンプレートを使って作業しています。これをプロパティセッターで動作させるために、背景色のアルファを目的の不透明度に設定し、背景rgbコードを背景セッターにコピーしました。 :)完璧に動作します! – C4u

関連する問題