WPF自定义附加属性,可以为空

时间:2016-03-25 13:59:05

标签: wpf xaml attached-properties

我需要创建一个可以为空的自定义附加属性,如下所示:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:l="clr-namespace:WpfApplication1"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <l:SimpleAttach.MyProperty></l:SimpleAttach.MyProperty>

</Grid>

我试过这样做:

public static class SimpleAttach
{
    public static object GetMyProperty(DependencyObject obj)
    {
        return obj.GetValue(MyPropertyProperty);
    }

    public static void SetMyProperty(DependencyObject obj, object value)
    {
        obj.SetValue(MyPropertyProperty, value);
    }

    // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.RegisterAttached("MyProperty", typeof(object), typeof(SimpleAttach), new PropertyMetadata(null));
}

但这只是一个错误:

  

该物业&#34; MyProperty&#34;不能为空。

相比之下,MS似乎没有任何问题创建空的附加属性。这是一个不会出现空的错误的例子:

    <TextBlock Name="VatAmount" Text="hello world" TextAlignment="Right" Margin="0,0,20,111" HorizontalAlignment="Right" Width="120" Height="16" VerticalAlignment="Bottom">
        <i:Interaction.Behaviors>
        </i:Interaction.Behaviors>
    </TextBlock>

那么我该告诉XAML该属性是否为空?

1 个答案:

答案 0 :(得分:1)

好的,所以我终于弄明白了我的问题。有时阅读官方文档会有所帮助:XAML Syntax In Detail

特别是我似乎指的是&#34;内容属性&#34;。

  

XAML内容语法是仅在指定ContentPropertyAttribute作为其类声明的一部分的类上启用的语法。 ContentPropertyAttribute引用属性名称,该属性名称是该类型元素(包括派生类)的content属性。当由XAML处理器处理时,在对象元素的开始和结束标记之间找到的任何子元素或内部文本将被指定为该对象的XAML内容属性的值。

其次,在Microsofts Interactivity.Behaviors的例子中,即集合和集合允许包含0个项目。

此外,如果您继续实施作为集合的附加行为,那么本文将引导您完成这些怪癖:Attached property of type list