Silverlight 如何在设计时为ListBoxItem模板使用Sketchflow示例数据?
我正在使用Expression Blend 4和Visual Studio 2010创建Sketchflow原型 我有一个样本数据收集和一个绑定到它的列表框。这在设计时和运行时都会显示出来。然而,ListBoxItem模板非常复杂,我想把它拉到自己的XAML文件中。即使这些项在使用模板的主列表框中仍按预期呈现,但当我打开模板本身时,所有数据绑定控件都是空的 如果将DataContext添加到模板中,我可以在模板中查看并使用填充的对象,但是本地DataContext会覆盖列表框上的DataContext集 一段代码将说明这一点。首先创建一个Sketchflow项目(我使用的是Silverlight,但对WPF来说应该是一样的),然后添加一个名为SampleDataSource的项目数据源。添加一个名为ListData的集合,其中包含一个名为Title的字符串属性 以下是Sketchflow主屏幕(按比例缩小)的代码,我们称之为main.xaml:Silverlight 如何在设计时为ListBoxItem模板使用Sketchflow示例数据?,silverlight,expression-blend,sketchflow,sample-data,Silverlight,Expression Blend,Sketchflow,Sample Data,我正在使用Expression Blend 4和Visual Studio 2010创建Sketchflow原型 我有一个样本数据收集和一个绑定到它的列表框。这在设计时和运行时都会显示出来。然而,ListBoxItem模板非常复杂,我想把它拉到自己的XAML文件中。即使这些项在使用模板的主列表框中仍按预期呈现,但当我打开模板本身时,所有数据绑定控件都是空的 如果将DataContext添加到模板中,我可以在模板中查看并使用填充的对象,但是本地DataContext会覆盖列表框上的DataCont
<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:DemoScreens"
mc:Ignorable="d"
x:Class="DemoScreens.Main"
Width="800" Height="600">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ProjectDataSources.xaml"/>
</ResourceDictionary.MergedDictionaries>
<DataTemplate x:Key="ListBoxItemTemplate">
<local:DemoListBoxItemTemplate d:IsPrototypingComposition="True" Margin="0,0,5,0" Width="748"/>
</DataTemplate>
</ResourceDictionary>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="#5c87b2" DataContext="{Binding Source={StaticResource SampleDataSource}}">
<ListBox Background="White" x:Name="DemoList" Style="{StaticResource ListBox-Sketch}" Margin="20,100,20,20" ItemTemplate="{StaticResource ListBoxItemTemplate}" ItemsSource="{Binding ListData}" ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
</Grid>
</UserControl>
您可以看到它引用了DemoListBoxItemTemplate,该模板在其自己的DemoListBoxItemTemplate.xaml中定义:
<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:DemoScreens"
mc:Ignorable="d"
x:Class="DemoScreens.DemoListBoxItemTemplate">
<Grid x:Name="LayoutRoot">
<TextBlock Text="{Binding Title}" Style="{StaticResource BasicTextBlock-Sketch}" Width="150"/>
</Grid>
</UserControl>
显然,这比我实际的列表框简单,但它应该足以说明我的问题。在表达式设计器中打开Main.xaml时,列表框将填充样例数据。但是,当您打开DemoListBoxItemTemplate.xaml时,没有数据上下文,因此没有数据可显示,这使得从视觉上识别控件更加困难
如何在使用模板时显示样本数据,同时仍允许将更大的样本数据集用于列表框本身?我相信这对您应该有用,我刚刚用SL和Blend 4进行了尝试:
希望这有帮助,如果没有,请告诉我。谢谢,我尝试了这个建议,但最终得到了非常相似的结果:我在资源上设置的任何datacontext(以便在设计时可以看到内容的布局)都会覆盖列表框的datacontext集(我希望在运行时看到)。不过,我真的很感谢你的详尽答复!资源不需要单独的datacontext,它应该继承正在编辑的datacontext。