Silverlight:何时可以使用依赖属性?

时间:2010-11-30 23:57:54

标签: c# silverlight events

我在XAML(Silverlight 4)中设置依赖项属性:

<my:TopSearchBar x:Name="topSearchBar" Grid.Row="0" Navigator="{Binding ElementName=navigationFrame}" HorizontalAlignment="Stretch" VerticalAlignment="Top" />

我需要注册navigationFrame的一些导航事件。但是,以下操作因空指针异常而失败:

    public TopSearchBar()
    {
        // Required to initialize variables
        InitializeComponent();

        Loaded += new RoutedEventHandler(TopSearchBar_Loaded);
    }

    void TopSearchBar_Loaded(object sender, RoutedEventArgs e)
    {
        // Navigator is null
        Navigator.Navigated += new NavigatedEventHandler(Navigated);
    }

何时是注册这些事件处理程序的合适时间?我尝试在属性设置器中执行此操作,但该断点从未被命中:

    public Frame Navigator
    {
        get { return GetValue(NavigatorProperty) as Frame; }
        set { SetValue(NavigatorProperty, value); }
    }

1 个答案:

答案 0 :(得分:2)

绑定不使用Navigator属性。相反,绑定类直接访问类型为NavigatorProperty的{​​{1}}字段,并设置该值。

在您的代码中,您可以在NavigatorProperty对象上执行OverrideMetadata。创建一个包含PropertyChangedCallback的PropertyMetadata,并在其中添加事件处理程序。请注意,OverrideMetadata适用于您指定类型的所有实例,因此请指定您需要的最低实例(可能是TopSearchBar),并且要小心。

DependencyProperty.OverrideMetadata Method