【问题标题】:Attached Properties as XAML Elements作为 XAML 元素的附加属性
【发布时间】:2011-03-10 23:13:59
【问题描述】:

我有一类附加属性:

public static class XamlProps
{
    #region Attached Properties

    private static readonly DependencyProperty FooProperty = DependencyProperty.RegisterAttached(
        "Foo",
        typeof(string),
        typeof(XamlProps),
        null);

    public static void SetFoo(DependencyObject obj, string action)
    {
        obj.SetValue(FooProperty, action);
    }
}

我在我的 XAML 中使用这些属性:

<Border me:XamlProps.Foo="Foo to the Bar">

但现在我想在这个属性中设置一个更大的值,所以我想把它用作一个元素:

<Border>
    <me:XamlProps.Foo>Foo to the Bar</me:XamlProps.Foo>
</Border>

但现在 Silverlight 不再调用 SetFoo()。我如何让它发挥作用?

如果重要的话,在 Windows Phone 7 上。

【问题讨论】:

    标签: c# silverlight xaml windows-phone-7


    【解决方案1】:

    如果您使用该语法,则需要指定类型:

    <Border>
        <me:XamlProps.Foo>
            <sys:String>Foo to the Bar</sys:String>
        </me:XamlProps.Foo>
    </Border>
    

    sys 命名空间映射到 System.您还需要定义 GetFoo ...

    可能是复制粘贴错字,但在注册中

    typeof(XamlActions)
    

    应该是

    typeof(XamlProps)
    

    【讨论】:

    【解决方案2】:

    你不应该依赖被调用的 SetFoo。任何事情都可以简单地调用 SetValue(FooProperty, "blah") 并绕过它。

    您应该在 DependencyProperty.Register 调用中定义一个PropertyChangedCallback 以收到更改通知。

    【讨论】:

    • 我不依赖调用 SetFoo() ,除非在这种情况下单步执行以查看它是否已设置。最终,我实际上并不想要对这些进行更改。这是一个初始行为的事情,而不是持续的。
    • 好的,但除非您明确调用 SetFoo,否则无法保证它会通过 XAML 调用。
    猜你喜欢
    • 2020-03-22
    • 1970-01-01
    • 2015-04-26
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2018-01-28
    相关资源
    最近更新 更多