zoukankan      html  css  js  c++  java
  • [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.

  • 相关阅读:
    使用asp.net调用谷歌地图api
    JAVASCRIPT+DHTML实现表格拖动
    strcpy & memcpy区别
    python解析邮件的时候编码问题
    snprintf不能使用"字符串指针"赋值,可以使用字符数组
    二级结构体的赋值和访问方法
    C lstat major MAJOR 获得设备号
    C解析config
    C语言中的DEBUG
    opencv实例二:缩放一张图片
  • 原文地址:https://www.cnblogs.com/cjw1115/p/5052836.html
Copyright © 2011-2022 走看看