Silverlight绑定到UserControl的DependencyProperty会抛出NullReferenceException

时间:2014-10-27 06:27:31

标签: c# silverlight binding user-controls dependency-properties

我有一个UserControl,其中包含一个名为ItemWidth的依赖项属性。我将通过UserControlStyle中的几个Path的宽度绑定到此依赖项属性,但在设计时我得到NullReferenceException。这是代码:

MyUserControl.xaml.cs

public partial class MyUserControl: UserControl
{
    public MyUserControl()
    {
        InitializeComponent();
    }

    public double ItemWidth
    {
        get { return (double )GetValue(ItemWidthProperty);}
        set { SetValue(ItemWidthProperty, value);}
    }

    public static readonly DependencyProperty ItemWidthProperty =
        DependencyProperty.Register("ItemWidth", typeof(double),
        typeof(MyUserControl), new PropertyMetadata(21));

MyUserControl.xaml

<UserControl x:Name = "root" ....>
    <StackPanel DataContext="{Binding ElementName=root}"
        Orientation="Horizontal">
        <StackPanel.Resources>
            <Style TargetType="Path">
                <Setter Property="Width" Value="{Binding ItemWidth}"/>
            </Style>
        </StackPanel.Resources>
        <Path Data="some path"/>
        <Path Data="some path"/>
        <Path Data="some path"/>
        <Path Data="some path"/>
        <Path Data="some path"/>
    </StackPanel> 
</UserControl> 

如果我分别为每个Path设置宽度,则不会发生错误。但我想使用样式,不要为UserControl中的每个路径定义宽度属性。

1 个答案:

答案 0 :(得分:1)

我认为问题在于PropertyMetadata Initialization,它将21转换为整数。

如果您使用

new PropertyMetadata(21d) 

new PropertyMetadata(21.00)

它不会抛出null异常。