wpf Popup Lightbox对窗口的影响

时间:2012-06-01 20:03:56

标签: wpf popup window lightbox effect

当我打开弹出窗口时,我正在使用以下代码在窗口上设置灰色灯光效果。它工作正常,但它基本上重新加载所有控件或刷新主窗口。

特别是这一行: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;

如果没有刷新主窗口或重新加载控件,可以选择具有相同的效果吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您的主窗口有一个Grid作为其布局根(即使所有内容都在第一个单元格中),那么您可以将此blackoutGrid作为子网格添加到该网格中,它将显示在其他元素上方而不会弄乱原始的可视树结构。

在这种情况下,您的窗口内容将是一个网格,您可以将blackoutGrid添加到该网格,并在完成后将其删除。

你写这个的方式似乎有点反对面向对象的做法。从技术上讲,它应该是您的主窗口,能够显示灯箱效果。