2014-03-19 12 views
1

组不同元素的不透明度,我想知道这是否是可能的:比窗口

  • 我有窗口(窗口1)以列表视图。双击此列表视图的元素(Element1)打开小弹出窗口(Window2)。
  • 我想元素1和窗口2不透明度设置为1,但窗口1到0.2

窗口2是与ShowDialog的()的HasValue最上面开放,像

this.Opacity = 0.2; 
    selected.opacity = 1; 
    Window2.opacity = 1; 
    if(Window2.ShowDialog().HasValue()) 
     this.Opacity = 1; 

@EDIT: 主窗口中,被称为“窗口1”:

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

你试过了吗? –

+0

是的。 Window1不透明度是0.2,只有弹出窗口(Window2)是1.我需要该元素也设置为1;) – user1617141

+0

似乎你有一个点击方法,当你点击元素时打开弹出窗口。没有从元素作为参数的句柄? –

回答

1

不幸的是,你要实现的目标不能直接完成与WPF,因为Opacity值是由子控件继承的。从UIElement.Opacity Property页面上MSDN:

不透明度从父元素应用上下来的元素树子元素,但嵌套透明度设置了明显的影响在各个子元素的属性值不显示。例如,如果列表具有50%(0.5)的不透明度,并且其列表项目之一具有其自己的不透明度设置为20%(0.2),则该列表项目的净可见不透明度将被渲染为如10%( 0.1),但查询时列表项Opacity属性的属性值仍然为0.2。

然而,可能假冒您想要的外观由内Window半不透明使某些元素,同时还具有Opacity="1.0"子元素。因此,尝试从Window取出Opacity设置,并设置Background到看穿颜色是这样的:

window.Background = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0)); 

或者更简单:

window.Background = Brushes.Transparent; 

使用的透明色和低Opacity组合某些用户界面元素上的值应该会让你最终得到你想要的。