2

アプリケーションで「モーダル」タイプのイベントをシミュレートしようとしています。これにより、透明な背景の「薄暗い」感触と、コンテンツが含まれるフォームが得られます。

私が直面している問題は、オーバーレイキャンバスに不透明度を設定していて、それが子フォームに継承されていることです。

これは、以下のスクリーンショットに示されています。背景アイテムのコーナーがまだ見えます。

ここに画像の説明を入力

私が使用しているコードは次のとおりです。

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;
    }
4

1 に答える 1

0

簡単に解決する必要があります-別の親キャンバスを作成し、オーバーレイとパネルの両方を個別に追加します。そうすれば、パネルはオーバーレイの子ではなく兄弟になり、不透明度を継承しません。例えば:

protected void Draw(DrawingContext drawingContext)
    {
        var wrapper = new Canvas();

        // ...

        wrapper.Children.Add(canvas);
        wrapper.Children.Add(panel);

        Content = wrapper;
    }
于 2014-05-16T04:45:48.293 に答える