我有一个UserControl,我正试图将事件处理程序从父控件连接到它。我想尽可能少地使用代码,但遇到了一些问题。这是我的设置:
在NewUserControl代码后面我有:
public RoutedEventHandler PrintClickHandler { get; set; }
public DependencyProperty PrintClickHandlerProperty =
DependencyProperty.Register("PrintClickHandler", typeof(RoutedEventHandler),
typeof(NewUserControl), new PropertyMetadata(null));
在MyParentControl中,我有:
public RoutedEventHandler PrintClickHandler
{
get { return btnPrintCall_Click; }
}
private void btnPrintCall_Click(object sender, RoutedEventArgs e)
{
// some code
}
最后,在MyParentControls-xaml中,我有NewUserControl.PrintClickHandler:的绑定
<NewUserControl PrintClickHandler="{Binding Path=PrintClickHandler,
RelativeSource={RelativeSource AncestorType=local:MyParentControl, AncestorLevel=1}}" />
现在,在调试器中,我可以实现所有的getter和setter,这是在调用它们时命中断点的经典方式。我在命中中看到了MyParentControl.PrintClickHandler的getter,但NewUserControl.PrintClickHandler的setter从未命中。我在输出中也没有与此绑定相关的错误或警告。
我从未尝试过这样的事件,但看起来您的依赖属性可能是由于设置错误,请尝试:
public RoutedEventHandler PrintClickHandler
{
get { return (RoutedEventHandler)GetValue(PrintClickHandlerProperty); }
set { SetValue(PrintClickHandlerProperty, value); }
}
public static DependencyProperty PrintClickHandlerProperty = DependencyProperty.Register(
"PrintClickHandler",
typeof(RoutedEventHandler),
typeof(NewUserControl),
new PropertyMetadata(null));
这个问题是错误的。在处理事件时,使用依赖属性是不合适的。我可以简单地在代码后面添加一个公共Event属性,该属性可以在xaml中设置为适当的事件处理程序方法。