当前位置:  开发笔记 > 编程语言 > 正文

如何绑定到UWP中的附加属性?

如何解决《如何绑定到UWP中的附加属性?》经验,为你挑选了1个好方法。

我需要将控件的属性绑定到XAML中的附加属性(以便附加属性成为绑定的源),我无法弄清楚如何做到 - VS2015给了我" 价值不会下降在预期范围内 "错误,当我运行应用程序时,我得到一个例外.

下面显示的技术在WPF中完美运行.

以下是演示此问题的示例应用程序.

AttachedPropertyTest.cs:

namespace App7
{
    public static class AttachedPropertyTest
    {
        public static readonly DependencyProperty FooProperty = DependencyProperty.RegisterAttached(
            "Foo", typeof(string), typeof(AttachedPropertyTest), new PropertyMetadata("Hello world!"));

        public static void SetFoo(DependencyObject element, string value)
        {
            element.SetValue(FooProperty, value);
        }

        public static string GetFoo(DependencyObject element)
        {
            return (string) element.GetValue(FooProperty);
        }
    }
}

MainPage.xaml中:



    
        
    

而不是显示"Hello world!" (上面的TextBlock上的Foo附加属性的默认值),我从InitializeComponent抛出XamlParseException.像往常一样,异常对象不包含任何有用的信息.

有趣的是,如果我尝试绑定到任何标准(内置到框架中)附加属性,就不会发生这种情况(Grid.Row),因此似乎XAML解析器不允许我使用自定义附加属性提供程序,这很荒谬. ..

那么这样做的正确方法是什么?



1> user5606561..:

尝试使用x:Bind声明而不是Binding声明.


    

但是,使用x:Bind通过生成代码来支持后面代码中的绑定.

经过一些实验,在生成XamlTypeInfo.g.cs文件的工具的问题中似乎发生了什么,该文件是已声明的Xaml元素的编译查找,不幸的是InitTypeTables()方法缺少AttachedPropertyTest注册.

一篇关于XamlTypeInfo类生成的有趣文章描述了您的问题,提出了一些建议,包括使用自定义IXamlMetadataProvider

我发现以下更改也会起作用:

从static更改AttachedPropertyTest类的声明并添加Bindable属性,这将使生成XamlTypeInfo类的工具可以检测到它.

[Bindable]
public class AttachedPropertyTest
{
    public static readonly DependencyProperty FooProperty = 
        DependencyProperty.RegisterAttached(
        "Foo", typeof(string), typeof(AttachedPropertyTest), new PropertyMetadata("Hello world!"));

    public static void SetFoo(DependencyObject element, string value)
    {
        element.SetValue(FooProperty, value);
    }

    public static string GetFoo(DependencyObject element)
    {
        return (string)element.GetValue(FooProperty);
    }
}

然后修改xaml声明以包含RelativeSource

    

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有