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.

  • 相关阅读:
    汇编-实验9
    Starling开源手势库AcheGesture
    Robotlegs2的Starling扩展
    Flash Builder 4.6/4.7 注释以及字体大小修改
    js中函数的理解
    js对象引用赋值后
    var声明提前 undefined
    光棍节程序员闯关秀
    body和普通div背景图宽高百分比的区别
    笔试题
  • 原文地址:https://www.cnblogs.com/cjw1115/p/5052836.html
Copyright © 2011-2022 走看看