我在用户控件中定义了这样的属性:
public bool IsSelected
{
get { return (bool)GetValue(IsSelectedProperty); }
set
{
SetValue(IsSelectedProperty, value);
StackPanelDetails.Visibility = value ? Visibility.Visible : Visibility.Collapsed;
}
}
public static readonly DependencyProperty IsSelectedProperty =
DependencyProperty.Register("IsSelected", typeof (bool), typeof (ucMyControl));
但是当我在xaml中设置其属性时,它想要触发它(不调用set)。
<DataTemplate><local:ucTopicItem IsSelected="False" /></DataTemplate>
可能是什么问题?
在XAML中设置属性时,将不会调用依赖项属性的设置器。 WPF而是直接调用SetValue
方法。
请参阅MSDN XAML Loading and Dependency Properties以了解为何不调用设置器的说明。
您必须使用属性元数据注册PropertyChangedCallback。
您应该直接在依赖项属性中使用属性更改的处理程序。这样,您可以确保在XAML中进行设置时调用它:
public static readonly DependencyProperty IsSelectedProperty =
DependencyProperty.Register("IsSelected", typeof(bool), typeof(ucMyControl), new PropertyMetadata(false, OnIsSelectedChanged));
private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// Implement change logic
}