微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WinRT自定义控件依赖项属性设置/绑定

我正在尝试为WinRT / Metro应用程序开发自定义控件.

它有一个依赖属性,我希望能够在自定义控件中设置它的值.但是,使用SetValue会中断控件的使用者可能创建的任何绑定.

我找到的解决方案(例如SetCurrentValue)似乎都不适用于WinRT / Metro.这个问题有方法解决吗?

这听起来很简单 – 老实说! – 我试图在这里和其他地方找到解决方案.任何帮助将不胜感激.

解决方法

您可以在PropertyMetadata中设置认值(Dr. WPFsnippets来救援!).

#region IsAvailable
private static bool DefaultIsAvailable = false;

/// <summary>
/// IsAvailable Dependency Property
/// </summary>
public static readonly DependencyProperty IsAvailableProperty =
    DependencyProperty.Register(
        "IsAvailable",typeof(bool),typeof(CustomControl1),new PropertyMetadata(DefaultIsAvailable,OnIsAvailableChanged));

/// <summary>
/// Gets or sets the IsAvailable property. This dependency property 
/// indicates ....
/// </summary>
public bool IsAvailable
{
    get { return (bool)GetValue(IsAvailableProperty); }
    set { SetValue(IsAvailableProperty,value); }
}

/// <summary>
/// Handles changes to the IsAvailable property.
/// </summary>
/// <param name="d">
/// The <see cref="DependencyObject"/> on which
/// the property has changed value.
/// </param>
/// <param name="e">
/// Event data that is issued by any event that
/// tracks changes to the effective value of this property.
/// </param>
private static void OnIsAvailableChanged(
    DependencyObject d,DependencyPropertyChangedEventArgs e)
{
    var target = (CustomControl1)d;
    bool oldisAvailable = (bool)e.OldValue;
    bool newIsAvailable = target.IsAvailable;
    target.OnIsAvailableChanged(oldisAvailable,newIsAvailable);
}

/// <summary>
/// Provides derived classes an opportunity to handle changes
/// to the IsAvailable property.
/// </summary>
/// <param name="oldisAvailable">The old IsAvailable value</param>
/// <param name="newIsAvailable">The new IsAvailable value</param>
protected virtual void OnIsAvailableChanged(
    bool oldisAvailable,bool newIsAvailable)
{
}
#endregion

编辑*

如果你想改变值 – 你可以,但如果你使用OneWay的基本绑定 – 即 – 它从绑定源获取值并将其设置为依赖属性 – 绑定将停止工作,因为源和目标值将不再同步.

如果设置Mode =“TwoWay” – 绑定目标(您的控件)修改依赖项属性时将更新绑定源,因此绑定将保持有效并将继续双向工作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐