我想知道是否可以:
Window2以ShowDialog()为最顶层.HasValue,如
this.Opacity = 0.2;
selected.opacity = 1;
Window2.opacity = 1;
if(Window2.ShowDialog().HasValue())
this.Opacity = 1;
@EDIT: 主窗口,名为" Window1":
private void Border_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
if (popup != null)
popup.Close();
popup = new PopupWindow(ListView.SelectedItem as SelectedItem, sender as Border, this);
popup.Topmost = true;
((Border)sender).Opacity = 1;
this.Opacity = 0.2;
popup.Opacity = 1;
if (popup.ShowDialog().HasValue)
{
this.Opacity = 1;
}
}
}
答案 0 :(得分:1)
不幸的是,您尝试实现的目标无法通过WPF直接完成,因为Opacity
值是由子控件继承的。来自MSDN上的UIElement.Opacity
Property页:
不透明度从元素树下的父元素应用到子元素,但嵌套不透明度设置的可见效果未在各个子元素的属性值中指示。例如,如果列表具有50%(0.5)的不透明度,并且其中一个列表项的自身不透明度设置为20%(0.2),则该列表项的净可见不透明度将呈现为10%( 0.1),但查询时列表项Opacity属性的属性值仍为0.2。
但是, 可能会伪造您想要的外观,方法是使Window
内的某些元素半透明,同时仍然有Opacity="1.0"
子元素。因此,请尝试从Opacity
中移除Window
设置,而是将Background
设置为透明色,如下所示:
window.Background = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0));
甚至更简单:
window.Background = Brushes.Transparent;
在某些UI元素上使用透明色和低Opacity
值的组合可以最终获得您想要的效果。