我正在研究在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>
任何想法或指示都将不胜感激。
感谢。
答案 0 :(得分:2)
您正在使用d:DataContext,它仅出现在设计模式中。当您将控件放在MainPage中时,Blend将其解释为处于运行时模式,因此数据不会出现,因此这是预期的行为。
在Blend中为控件创建示例数据时,您可以指定是否希望在运行时期间使用此示例数据,或者您可以简单地设置DataContext属性,而不是d:DataContext属性。
下图显示了在Blend中创建示例数据源时如何在运行时启用示例数据:
当您选择“在应用程序运行时启用示例数据”选项时,您的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>
这将显示设计时和运行时的样本数据。