2011-04-04 76 views
0

我有一个包装另一个控件(文本框)的自定义控件(一个Adorner)。WPF - 在我的自定义控件上覆盖IsVisible

public class MyCustomAdorner : Decorator 
{ 
    ... 
    public MyCustomAdorner() 
    { 
     Child = new TextBox(); 
    } 
} 

我希望能够覆盖VisibilityChanged使得MyCustomAdorner的事件,如果孩子的可视性变化,仅启动,而不是实际的装饰。我将如何去做这件事?

+3

可能更容易(也可能是更明智的)来创建一个单独的事件'ChildVisibilityChanged'而不是改变现有事件的含义。 – 2011-04-04 13:31:21

回答

2

在第一种方法中,我会尝试将Adorner的可见性绑定到TextBox的可见性(不确定这是否适用)。这样,如果文本框更改可见性,装饰者将遵循。如果你用两种方式来绑定它们,那么它也会反过来工作。所以如果你不希望它能够同时工作,请确保你不设置Adorner的可见性。

如果将Visibilities绑定在一起不起作用,您可以尝试声明一个管理可见性的新属性(例如bool),并通过Converter将这两个Visibility绑定到该布尔。而当你想改变Visibilities的东西时,你可以将这个布尔值设置为一个新的值。

重写VisibilityChange事件不健全的对我好,我也不敢肯定,如果你甚至可以做到这一点...