我在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); }
}
答案 0 :(得分:2)
绑定不使用Navigator
属性。相反,绑定类直接访问类型为NavigatorProperty
的{{1}}字段,并设置该值。
在您的代码中,您可以在NavigatorProperty对象上执行OverrideMetadata。创建一个包含PropertyChangedCallback的PropertyMetadata,并在其中添加事件处理程序。请注意,OverrideMetadata适用于您指定类型的所有实例,因此请指定您需要的最低实例(可能是TopSearchBar),并且要小心。