我有下面的代码。正在调用PropertyChanged事件,但getter和setter不调用。我不能为我的生命明白为什么不。我有其他属性,在这些属性中,同样的事情正在发生,但是值正在被设置。这是一个自定义控件,如果这有区别的话。当我在get/set上放置一个断点时,我什么也得不到。但是,属性更改将返回正确的值。任何帮助都是非常感谢的。
/// <summary>
/// Identifies the PlacementTarget dependency property.
/// </summary>
public static readonly DependencyProperty PlacementTargetProperty =
DependencyProperty.RegisterAttached(
"PlacementTarget",
typeof(UIElement),
typeof(FunctionPanel),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits, PlacementTargetPropertyChanged)
);
/// <summary>
/// Gets or setsthe PlacementTarget of tooltips for all child controls.
/// </summary>
public UIElement PlacementTarget
{
get { return (UIElement)GetValue(PlacementTargetProperty); }
set { SetValue(PlacementTargetProperty, value); }
}
/// <summary>
/// Sets the value of the PlacementTarget dependency property.
/// </summary>
/// <param name="target">Target object.</param>
/// <param name="value">Value argument.</param>
public static void SetPlacementTarget(DependencyObject target, UIElement value)
{
target.SetValue(PlacementTargetProperty, value);
}
/// <summary>
/// Gets the value of the PlacementTarget dependency property.
/// </summary>
/// <param name="target">Target object.</param>
public static UIElement GetPlacementTarget(DependencyObject target)
{
return (UIElement)target.GetValue(PlacementTargetProperty);
}
/// <summary>
/// This method is called when the PlacementTarget dependency property changes value.
/// </summary>
/// <param name="sender">Sender object.</param>
/// <param name="e">Event arguments.</param>
private static void PlacementTargetPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
ToolTipService.SetPlacementTarget(sender, (UIElement)e.NewValue);
}附加信息
因此,从本质上说,PlacementTargetPropertyChanged处理得很好。我想问题是这个特定的DP并没有真正地传播给孩子们。以下是XAML片段:
<controls:FunctionPanel BetweenShowDelay="0"
InitialShowDelay="500"
IsError="False"
Message="MESSAGE"
Placement="Right"
PlacementTarget="{Binding RelativeSource={RelativeSource Self}}"
ShowDuration="60000" />除了PlacementTarget之外,所有的DPs都会访问子元素。我试过移除绑定,但没什么区别。
我正在通过使用Snoop来检查值来验证其他DPs。我已经创建了一个Int类型的InitialShowDelay DP。当我将值设置为5000时,所有子控件都继承该值,工具提示在出现之前延迟5秒。我可以通过在我的PlacementTargetPropertyChanged方法上放置一个断点来验证绑定是否发送了正确的控件。
更新1
因此,看来PlacementTarget运行得很好。“我的安置附加属性”的默认值(设置为“右侧”)将被忽略。当我通过XAML设置它时,它仍然不起作用。但是,如果将值设置为Top、左侧或底部,则工具提示将显示在正确的位置。
发布于 2013-05-24 11:42:33
Setter和Getter只是编码的.NET包装器。从XAML绑定时,将调用GetXXXX和SetXXX,而不是属性Getter和Setter。
您还可以访问DependencyProperty PropertyChanged回调,每次更改属性时都会调用该函数。
https://stackoverflow.com/questions/16722197
复制相似问题