[UWP]xaml中自定义附加属性使用方法的注意项

---恢复内容开始---

随笔小记,欢迎指正

在UWP平台上做WVVM的时候,想针对ListBox的SelectionChanged事件定义一个自定义的命令,于是使用自定义附加属性的方式。可是最后自定义附加属性SelectionChangedCommand写好了,却不知道怎么在XAML中使用。

我的自定义属性如下:

namespace SelectionChangedCommand.Services
{
    public static class SelectionChangedBehavior
    {
        public static readonly DependencyProperty SelectionChangedCommandProperty = DependencyProperty.Register("SelectionChangedCommand", typeof(ICommand), typeof(SelectionChangedBehavior), new PropertyMetadata(null, SelectionChangedPropertyCallBack));

        public static void SetSelectionChangedCommand(UIElement element, ICommand value)
        {
            element.SetValue(SelectionChangedCommandProperty, value);
        }
        public static ICommand GetSelectionChangedCommand(UIElement element)
        {
            return (ICommand)element.GetValue(SelectionChangedCommandProperty);
        }


        public static void SelectionChangedPropertyCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ListBox listBox = (ListBox)d;
            listBox.SelectionChanged += ListBox_SelectionChanged;
        }

        private static void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ListBox listBox = (ListBox)sender;
            GetSelectionChangedCommand(listBox).Execute(listBox.SelectedItem);
        }
    }
}

于是百度了一番,看到在Wpf中是如下写法:

xmlns:aqua="clr-namespace:AquariumObjects;assembly=AquariumLibrary"

 于是我便模仿着写了如下代码

xmlns:my="clr-namespace:SelectionChangedCommand.Services;assembly=SelectionChangedCommand"

其中“SelectionChangedCommand”是我的程序集名称。

然后再一个ListBox中做了如下引用

<ListBox my:SelectionChangedBehavior.SelectionChangedCommand="{Binding SelectionChangedCommand}" ></ListBox>

结果提示我存在未知的可附加成员“SelectionChangedBehavior.SelectionChangedCommand",所以我就把上面的命名空间改成了

xmlns:my="using:SelectionChangedCommand.Services"

结果就可以了。

那么clr-namespace和using之间到底有什么区别呢?

目前在网上查到:silvelight中是:clr-namespace.  windows8中改成了using.

原文地址:https://www.cnblogs.com/cjw1115/p/5052836.html