Webで画像をポップアップするために見つけることができるものと同様に、wpfでオーバーレイを作成しようとしています(背景が暗くなります)。アプリケーションの複数の部分で、さまざまな種類のコンテンツで再利用できるようにしたいと考えています。
これは、装飾クラスのコンストラクターの一時的なコードです (試してみてください)。
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);
}
(もちろん) クラスに加えて、装飾された要素、GetVisualChild、および VisualChildCount の正しいサイズを装飾者に与えるために、MeasureOverride と ArrangeOverride の ovverride があります。
ここでの問題は、装飾が正しく表示されますが、装飾された要素にイベントや動作が適用されないことです。例えば:
AdornerLayer layer = AdornerLayer.GetAdornerLayer(textBoxProva);
layer.Add(new DarkOverlayAdorner(textBoxProva, new Button{Content = "prova"}));
ここにボタンが表示されていますが、ボタンをクリックすることはできず、ボタンのマウスオーバーに対する効果は適用されません。私はまだ問題を理解できません。