MainPage.xaml中的Silverlight用户控件

时间:2010-10-20 03:23:04

标签: silverlight-4.0 datacontext

我正在研究在Expression Blend 4中的Silverlight项目中构建用户控件。该控件具有一组用户控件的相关样本数据,并且数据在用户控件中正确显示。

当我将用户控件放在主页面上时,示例数据不会出现在用户控件中。这是正确的行为,还是我设置/不设置某些内容?我发现奇怪的是,当我编辑用户控件时,数据会显示在主页面旁边的重建指示器(黄色感叹号)。当我重建时,数据会再次消失。

这是主页码:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:SilverlightApplication2" mc:Ignorable="d"
x:Class="SilverlightApplication2.MainPage"
Width="1200" Height="640">
<UserControl.Resources>
    <local:MultiDayViewModel x:Key="MultiDayViewModelDataSource" d:IsDataSource="True"/>
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="White" d:DataContext="{d:DesignData /SampleData/TestSampleData.xaml}">
    <Grid.RowDefinitions>
        <RowDefinition Height="0.128*"/>
        <RowDefinition Height="0.872*"/>
    </Grid.RowDefinitions>
    <StackPanel Margin="0,24,8,8" HorizontalAlignment="Right" Width="318" Orientation="Horizontal">
        <Button Content="Daily"/>
        <Button Content="Weekly"/>
    </StackPanel>
    <local:MultiDayView x:Name="MultiDayView" Margin="8" Grid.Row="1" DataContext="{Binding Calenar, Source={StaticResource MultiDayViewModelDataSource}}"/>
</Grid>

任何想法或指示都将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:2)

您正在使用d:DataContext,它仅出现在设计模式中。当您将控件放在MainPage中时,Blend将其解释为处于运行时模式,因此数据不会出现,因此这是预期的行为。

在Blend中为控件创建示例数据时,您可以指定是否希望在运行时期间使用此示例数据,或者您可以简单地设置DataContext属性,而不是d:DataContext属性。

下图显示了在Blend中创建示例数据源时如何在运行时启用示例数据:

Enable sample data when application is running

当您选择“在应用程序运行时启用示例数据”选项时,您的XAML如下所示:

    <UserControl
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="ASD_Answer002.MainPage"
        Width="640" Height="480">
        <UserControl.Resources>
            <DataTemplate x:Key="DataTemplate1">
                <CheckBox Content="{Binding Property1}" IsChecked="{Binding Property2, Mode=TwoWay}"/>
            </DataTemplate>
        </UserControl.Resources>

        <Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding Source={StaticResource SampleDataSource}}">
            <ItemsControl ItemsSource="{Binding Collection}" ItemTemplate="{StaticResource DataTemplate1}" Margin="50"/>
        </Grid>
    </UserControl>

这将显示设计时和运行时的样本数据。