首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未调用WPF Getter/Setter

未调用WPF Getter/Setter
EN

Stack Overflow用户
提问于 2013-05-23 19:22:13
回答 3查看 5.3K关注 0票数 2

我有下面的代码。正在调用PropertyChanged事件,但getter和setter不调用。我不能为我的生命明白为什么不。我有其他属性,在这些属性中,同样的事情正在发生,但是值正在被设置。这是一个自定义控件,如果这有区别的话。当我在get/set上放置一个断点时,我什么也得不到。但是,属性更改将返回正确的值。任何帮助都是非常感谢的。

代码语言:javascript
复制
    /// <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片段:

代码语言:javascript
复制
<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、左侧或底部,则工具提示将显示在正确的位置。

EN

Stack Overflow用户

发布于 2013-05-24 11:42:33

SetterGetter只是编码的.NET包装器。从XAML绑定时,将调用GetXXXXSetXXX,而不是属性GetterSetter

您还可以访问DependencyProperty PropertyChanged回调,每次更改属性时都会调用该函数。

票数 7
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16722197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档