将Usercontrol设置为Datatemplate

时间:2011-11-28 15:45:56

标签: wpf xaml binding

我有以下ProductList模板snipet

<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 XPath=@Image}" 
                        Height="149" Width="101" />
                                <TextBlock Text="{Binding XPath=@Name}" 
                         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的集合时,只保留部分我没有显示我的控件

1 个答案:

答案 0 :(得分:1)

通常我只是在Resources中添加DataTemplate。如果数据模板是全局的,则可以是<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 }" />