Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未通过Silverlight 4中的XAML数据绑定设置自定义UserControl属性_Silverlight_Data Binding_Xaml_User Controls_Silverlight 4.0 - Fatal编程技术网

未通过Silverlight 4中的XAML数据绑定设置自定义UserControl属性

未通过Silverlight 4中的XAML数据绑定设置自定义UserControl属性,silverlight,data-binding,xaml,user-controls,silverlight-4.0,Silverlight,Data Binding,Xaml,User Controls,Silverlight 4.0,我有一个名为GoalProgressControl的自定义用户控件。另一个用户控件包含GoalProgressControl,并通过XAML中的数据绑定设置其GoalName属性。但是,从未设置GoalName属性。当我在调试模式下检查它时,GoalName在控件的生存期内保持“null” 如何设置GoalName属性?我有没有做错什么 我正在使用.NETFramework4和Silverlight4。我对XAML和Silverlight比较陌生,因此非常感谢您的帮助 我试图将GoalProgr

我有一个名为GoalProgressControl的自定义用户控件。另一个用户控件包含GoalProgressControl,并通过XAML中的数据绑定设置其GoalName属性。但是,从未设置GoalName属性。当我在调试模式下检查它时,GoalName在控件的生存期内保持“null”

如何设置GoalName属性?我有没有做错什么

我正在使用.NETFramework4和Silverlight4。我对XAML和Silverlight比较陌生,因此非常感谢您的帮助

我试图将GoalProgressControl.GoalName更改为POCO属性,但这会导致Silverlight错误,并且我的阅读使我相信数据绑定属性应为DependencyProperty类型。我还简化了代码,只关注GoalName属性(代码如下),但没有成功

以下是GoalProgressControl.xaml:

<UserControl x:Class="GoalView.GoalProgressControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Height="100">

<Border Margin="5" Padding="5" BorderBrush="#999" BorderThickness="1">
    <TextBlock Text="{Binding GoalName}"/>
</Border>
</UserControl>
我已将GoalProgressControl放置在另一页上:

    <Grid Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Margin="5" Background="#eee" Height="200">
        <Border BorderBrush="#999" BorderThickness="1" Background="White">
            <StackPanel>
                <hgc:SectionTitleBar x:Name="ttlGoals" Title="Personal Goals" ImageSource="../Images/check.png" Uri="/Pages/GoalPage.xaml" MoreVisibility="Visible" />
                <ItemsControl ItemsSource="{Binding Path=GoalItems}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <!--TextBlock Text="{Binding Path=[Name]}"/-->
                            <goal:GoalProgressControl GoalName="{Binding Path=[Name]}"/>

                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>
        </Border>
    </Grid>

请注意上面注释掉的“TextBlock”项。如果我在TextBlock中注释并注释掉GoalProgressControl,则绑定工作正常,TextBlock正确显示GoalName。此外,如果我将上面的“GoalName”属性替换为一个简单的文本字符串(例如“hello world”),则控件将正确呈现,并且在呈现时会在控件上显示“hello world”。

您必须通过

    new PropertyMetadata(OnValueChanged)
作为DependencyProperty.Register的最后一个参数,调用并设置属性

    private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ((GoalProgressControl)d).GoalName = (String)e.NewValue;
    }

我写了一篇关于Silverlight 4自定义属性绑定的文章,您可能会发现这篇文章很有用,可以在这里找到:

    private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ((GoalProgressControl)d).GoalName = (String)e.NewValue;
    }