【问题标题】:Setting Opacity On a Parent Element different than child element in WPF在与 WPF 中的子元素不同的父元素上设置不透明度
【发布时间】:2014-07-04 17:45:49
【问题描述】:

我正在尝试在我的应用程序中模拟一个“模态”类型的事件,该事件将提供透明背景“变暗”的感觉,以及一个包含内容的表单。

我遇到的问题是我在覆盖画布上设置不透明度,它在子窗体上继承。

这显示在下面的屏幕截图中。您仍然可以看到背景项目的角落。

我使用的代码如下:

protected void Draw(DrawingContext drawingContext)
    {
        //Crate Overlay Canvas
        Canvas canvas = new Canvas();
        canvas.Width = ((Canvas)this.AdornedElement).ActualWidth;
        canvas.Height = ((Canvas)this.AdornedElement).ActualHeight;
        canvas.Opacity = .4;
        canvas.Background = new SolidColorBrush(Colors.Black);

        //Create Form Panel
        StackPanel panel = new StackPanel();
        panel.Background = new SolidColorBrush(Colors.White);
        panel.Width = 400;
        panel.Height = 200;
        panel.Opacity = 1; //Just to make sure

        Button button = new Button();
        button.Content = "Test Button";
        button.Height = 30;

        panel.Children.Add(button);

        Canvas.SetLeft(panel, canvas.Width/2);
        Canvas.SetTop(panel, canvas.Height/2);

        canvas.Children.Add(panel);

        Content = canvas;
    }

【问题讨论】:

    标签: c# wpf winforms adorner adornerlayer


    【解决方案1】:

    应该很容易解决 - 创建另一个父 Canvas,并将叠加层和面板分别添加到它。这样,面板将成为叠加层的兄弟而不是其孩子,并且不会继承不透明度。例如:

    protected void Draw(DrawingContext drawingContext)
        {
            var wrapper = new Canvas();
    
            // ...
    
            wrapper.Children.Add(canvas);
            wrapper.Children.Add(panel);
    
            Content = wrapper;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 2013-09-08
      • 1970-01-01
      • 2012-01-22
      相关资源
      最近更新 更多