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

WPF Getter / Setter没有被调用
EN

Stack Overflow用户
提问于 2019-04-11 23:21:41
回答 2查看 0关注 0票数 0

我有以下代码。正在调用PropertyChanged事件,但getter和setter不是。我不能为我的生活看到为什么不。我有其他属性发生相同的事情,但值正在设置。这是一个自定义控件,如果这会产生影响。当我在get / set处设置断点时,我什么也得不到。但是,propertychanged返回正确的值。

代码语言: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之外的所有DP都将转到子元素。我已经尝试删除绑定但它没有任何区别。

我正在通过使用Snoop来检查其他DP来检查值。我创建了一个Int类型的InitialShowDelay DP。当我将值设置为5000时,所有子控件都会继承,并且工具提示会在出现之前延迟5秒。我可以通过在我的PlacementTargetPropertyChanged方法上放置一个断点来验证绑定是否正在发送正确的控件。

更新1

所以似乎PlacementTarget工作正常。我的Placement附加属性的默认值(设置为“right”)将被忽略。当我通过XAML设置它时,它仍然不起作用。但是,如果我将值设置为“上”,“左”或“下”,则工具提示将显示在正确的位置。

EN

Stack Overflow用户

发布于 2019-04-12 07:33:03

SetterGetter仅是.NET包装器为您的编码。当从XAML绑定GetXXXXSetXXX将被调用,而不是属性GetterSetter

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

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

https://stackoverflow.com/questions/-100006570

复制
相关文章

相似问题

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