我正在使用Expression Blend 4和Visual Studio 2010来创建Sketchflow原型。
我有一个Sample Data集合和一个绑定它的ListBox。这显示了我在设计时和运行时所期望的。但是,ListBoxItem模板它足够复杂,我想把它拉出到自己的XAML文件中。即使项目仍然在使用模板的主ListBox中按预期呈现,当我打开模板本身时,所有数据绑定控件都是空的。
如果我将DataContext添加到模板中,我可以在模板中查看和使用填充的对象,但随后该本地DataContext将覆盖列表框上的DataContext集。
一些代码将说明。首先创建一个Sketchflow项目(我使用的是Silverlight,但它应该对WPF起作用),然后添加一个名为SampleDataSource的项目数据源。添加一个名为ListData的集合,其中包含一个名为Title的String属性。
以下是主要Sketchflow屏幕的(按比例缩小)代码,我们称之为Main.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.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时,没有数据上下文,因此没有要显示的数据 - 这使得在视觉上识别控件变得更加困难。
我在处理模板时如何显示样本数据,同时仍允许将更大的样本数据集用于ListBox本身?
答案 0 :(得分:0)
我相信这对你有用,我只是尝试用SL和Blend 4:
现在你的模板在一个单独的文件中,并且仍然可以使用datacontext进行编辑,尽管它不会像在数据模板位于同一个用户控件中那样在画板上就位。
希望有所帮助,如果没有,请告诉我。