我有一个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从未被命中。我在输出中也没有与此绑定相关的错误或警告。
答案 0 :(得分:1)
我从来没有尝试过这样的事件,但看起来你的依赖属性可能设置不正确,请尝试:
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));
答案 1 :(得分:-1)
这个问题是错误的。在处理事件时,使用依赖属性是不合适的。我可以在我的代码中简单地添加一个公共Event属性,然后可以在xaml中将其设置为适当的事件处理程序方法。