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