1

我有一个 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 从未被击中。我在输出中也没有与此绑定相关的错误或警告。

4

2 回答 2

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));
于 2012-07-25T17:20:19.250 回答
-1

这个问题是错误的。当我处理一个事件时,使用依赖属性是不合适的。我可以简单地在我的代码中添加一个公共事件属性,可以在 xaml 中将其设置为适当的事件处理程序方法。

于 2012-08-02T15:18:19.140 回答