0

ポップアップを開いたときにウィンドウにグレーライト効果を設定するために、次のコードを使用しています。正常に動作しますが、基本的にすべてのコントロールをリロードするか、メインウィンドウを更新します。

特にこの行:currentWindow.Content = lightboxGrid;

Window currentWindow = Application.Current.Windows.Cast<Window>()
    .SingleOrDefault(x => x.Name.Equals(MAIN_WINDOW_NAME));

Grid lightboxGrid = new Grid();
object currentWindowContent = currentWindow.Content;
currentWindow.Content = null;
lightboxGrid.Children.Add(new ContentControl() 
{ 
    Content = currentWindowContent 
});

// now add the grid that will "black out" the content
Grid blackoutGrid = new Grid();
blackoutGrid.Background = new SolidColorBrush(Colors.Black);
lightboxGrid.Children.Add(blackoutGrid);
blackoutGrid.Opacity = 0.0; // start fully transparent
blackoutGrid.Loaded += blackoutGrid_Loaded;
currentWindow.Content = lightboxGrid;
this._lightboxEffectApplied = true;

メインウィンドウを更新したり、コントロールをリロードしたりせずに同じ効果を得るオプションは何でしょうか?

ここに画像の説明を入力してください

4

1 に答える 1

0

メイン ウィンドウにレイアウト ルートとして Grid がある場合 (すべてのコンテンツが最初のセルにある場合でも)、この blackoutGrid を子としてそのグリッドに追加すると、元のビジュアルを台無しにすることなく、他の要素の上に表示されます。ツリー構造。

この場合、ウィンドウのコンテンツはグリッドになり、blackoutGrid をそのグリッドに追加し、完了したら削除します。

これを書いている方法は、オブジェクト指向の実践に少し反しているようです。技術的には、ライトボックス効果を表示できるのはメイン ウィンドウである必要があります。

于 2012-06-01T20:59:19.267 に答える