繁体   English   中英

如何在WPF中以编程方式设置clr-namespace属性

[英]How to set a clr-namespace property programatically in WPF

我是WPF的新手,所以不确定问题的标题是否正确或有任何意义,请对其进行编辑,以使其更相关。 我在应用程序中使用Kinect.Toolbox MouseControl。 对于使用磁性控件,我有一个问题。 我知道可以通过添加以下内容在XAML中进行定义:

<Page ... 
  xmlns:local ="clr-namespace:Kinect.Toolbox;assembly=Kinect.Toolbox">
  ...
<Button local:MagneticPropertyHolder.IsMagnetic="True" ... />
 ....

但是我需要在代码中做到这一点。 无论如何,是否可以在代码中设置磁性控件? 我可以像这样在页面中获取所有控件:

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
    {
        if (depObj != null)
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                if (child != null && child is T)
                {
                    yield return (T)child;
                }

                foreach (T childOfChild in FindVisualChildren<T>(child))
                {
                    yield return childOfChild;
                }
            }
        }
    }

    foreach (Button tb in FindVisualChildren<Button>(this))
    {
            //Set the buttons to be magnetic
    }

但是我不明白如何编程设置它们。

这看起来像一个附加属性

要进行设置,您需要执行以下操作

tb.SetValue(MagneticPropertyHolder.IsMagneticProperty, true);

或可能

MagneticPropertyHolder.SetIsMagnetic(tb, true);

快速浏览一下Kinect工具箱源代码,可以发现两者都可以使用。 第二个是类型安全的。

请参见后面的代码中如何访问附件属性? 欲获得更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM