2010-12-28 13 views
4


ウェブ上で画像をポップアップ表示するのと同じように、背景が暗くなるwpfでオーバーレイを作成しようとしています。 私は、アプリケーションの1つ以上の部分で、異なる種類のコンテンツで再利用できるようにしたいと考えています。Wpf Adornerがインタラクションに反応しない

これは(もちろん)クラスのほかadornerクラスのコンストラクタの一時的なコード(ちょうどしようとする)

private readonly Grid _grid = new Grid(); 

public DarkOverlayAdorner(UIElement adornedElement, Object content) : 
     base(adornedElement) 
{ 
    _grid.Background = new SolidColorBrush(Color.FromArgb(99, 0, 0, 0)); 
    IsHitTestVisible = true; 
    var visual = content as UIElement; 
    if (visual != null) 
     _grid.Children.Add(visual); 
} 

ですが、私はadornerを与えることMeasureOverrideとArrangeOverrideのovverridesを持っています装飾された要素の正しいサイズ、GetVisualChild、およびVisualChildCount ...

アドラーが正しく表示されますが、装飾された要素にイベントや動作が適用されないという問題があります。例:

AdornerLayer layer = AdornerLayer.GetAdornerLayer(textBoxProva); 
layer.Add(new DarkOverlayAdorner(textBoxProva, new Button{Content = "prova"})); 

ボタンはここに表示されますが、ボタンをクリックすることはできません。ボタンのマウスオーバーには何の効果も適用されません。 私はまだ問題を把握することができません。

答えて

6

[OK]を、私は問題が何であるか把握しようと多くの時間を失ってしまった。 最後に私は解決策を見つけました:

要素をイベントに反応させたい場合は、その要素をアドルナーのビジュアルツリーにバインドする必要があります。 それを行う方法はadorner自体にintitialized VisualCollectionを、使用することです:

VisualCollection visualChildren; 
    FrameworkElement @object; 

    public DarkOverlayAdorner(UIElement adornedElement) : 
     base(adornedElement) 
    { 
     visualChildren = new VisualCollection(this); 
     @object = new Button {Content = "prova"}; 
     visualChildren.Add(@object); 
    } 
    protected override Visual GetVisualChild(int index) 
    { 
     return visualChildren[index]; 
    } 

イベントが正しく配線されているこの方法です。

0

Extended WPF ToolkitChildWindowコントロールをご覧ください。モーダルバックグラウンドエフェクトを使用してウィンドウをポップアップし、ウィンドウ内に配置するコンテンツを指定するコントロールです。

+0

ありがとうございました、これはおそらくより良い解決策(そして無料)でしたが、その間に私は自分の問題が何かを理解することを好みました – nemenos

関連する問題