2011-11-28 50 views
2

我有以下的产品列表模板snipet设置一个用户控件作为一个DataTemplate

<Style x:Key="ProductListStyle" TargetType="{x:Type s:SurfaceListBox }"> 
     <Setter Property="Background" Value="{DynamicResource {x:Static s:SurfaceColors.ListBoxItemBackgroundBrushKey}}" /> 
     <Setter Property="SelectionMode" Value="Single" /> 
     <Setter Property="Height" Value="234" /> 
     <Setter Property="ItemTemplateSelector"> 
      <Setter.Value> 
       <sc:ProductListTemplateSelector> 
        <sc:ProductListTemplateSelector.NormalItemTemplate> 
         <DataTemplate> 
          <StackPanel RenderTransformOrigin="0.5, 0.5"         
          Margin="7,0,0,0" 
          MinWidth="171" MaxWidth="171"         
          MinHeight="235" MaxHeight="235"> 
           <Image Margin="14,21,21,11" Source="{Binding [email protected]}" 
         Height="149" Width="101" /> 
           <TextBlock Text="{Binding [email protected]}" 
         MaxWidth="116" 
         FontSize="12"     
         Margin="21,0,21,21" 
         FontFamily="Segoe360" 
         TextAlignment="Center" 
         TextWrapping="Wrap" 
         Foreground="{DynamicResource {x:Static s:SurfaceColors.ListBoxItemForegroundBrushKey}}" 
         HorizontalAlignment="Center" /> 
          </StackPanel> 

         </DataTemplate> 
        </sc:ProductListTemplateSelector.NormalItemTemplate> 

我需要更换这种风格的DataTemplate中使用像

<local:MyUserControl> 

我的用户控制设置通过只保留部分之间我没有得到我的控制显示时,我的Itemsource设置与myUserControl的集合

+0

你试过我的建议吗? – sll

+0

你的'ItemsSource'是'MyUserControl'或某个对象的集合吗? – Rachel

回答

1

通常我只是将DataTemplate添加到Resources。如果数据模板是全局数据模板,则这可以是<Window.Resources><App.Resources>,如果模板只应用于指定范围,则可以使用FrameworkElement.Resources。例如,将模板添加到ListView.Resources只会应用特定ListView中的模板。

<Window.Resources> 
    <DataTemplate DataType="{x:Type local:ProductModel}"> 
     <local:MyUserControl /> 
    </DataTemplate> 
</Window.Resources> 

作为一个侧面说明,你原来的问题使我相信,你是一个ListView结合MyUserControl对象的集合。我真的不会推荐这个,但是如果是这种情况,你可以在你的DataTemplate中使用ContentControl,它的Content绑定到你的对象,它应该正确显示。

<ContentControl Content="{Binding }" /> 
+0

你好rachel,你说你不会推荐它的原因是什么? – serge

+1

@ user930203您正在内存中存储列表中每个项目的UI对象。将您的数据保留在内存中并允许WPF根据需要绘制UI元素更有效。例如,将'Product'数据类的列表存储在内存中,并告诉WPF使用'MyUserControl'作为模板来绘制'Product'对象,而不是将'ProductUserControl'存储在内存中为每个“产品”对象。这也使您能够利用WPF的虚拟化,在渲染新项目时将重新使用现有模板,而不是构建新项目。 – Rachel

+0

@ user930203如果您还没有,我会强烈建议在使用WPF时查看MVVM设计模式。它非常适合WPF的绑定系统,并且可以轻松创建和维护代码。下面是我写的一个简短的介绍,如果你感兴趣的话:http://rachel53461.wordpress.com/2011/05/08/simplemvvmexample/ – Rachel

相关问题