首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTemplate包括另一个DataTemplate

DataTemplate包括另一个DataTemplate
EN

Stack Overflow用户
提问于 2014-02-03 18:39:23
回答 1查看 798关注 0票数 0

如下所示,所有的DataTemplates都有相同的前两个TextBlock。

在fieldStringTemplate和fieldDateTemplate中,我想提到fieldTemplate,所以我不再重复这两种情况。

如何从DataTemplate?中引用DataTemplate

真正的应用程序有更多的模板和更多的公共元素。

在实际应用程序中,这些类实现了Field。

FieldTemplateSelector是基于类的。

代码语言:javascript
复制
<Window.Resources>
    <local:FieldTemplateSelector x:Key="fieldTemplateSelector"/>
    <DataTemplate x:Key="fieldTemplate">
        <StackPanel>
            <TextBlock Text="{Binding Path=Name}" />
            <TextBlock Text="{Binding Path=DisplayValue}" />
        </StackPanel>
    </DataTemplate>
    <DataTemplate x:Key="fieldStringTemplate">
        <StackPanel>
            <TextBlock Text="{Binding Path=Name}" />
            <TextBlock Text="{Binding Path=DisplayValue}" />
            <TextBox Text="{Binding Path=FieldValue}" />
        </StackPanel>
    </DataTemplate>
    <DataTemplate x:Key="fieldDateTemplate">
        <StackPanel>
            <TextBlock Text="{Binding Path=Name}" />
            <TextBlock Text="{Binding Path=DisplayValue}" />
            <DatePicker SelectedDate="{Binding Path=FieldValue}" />
        </StackPanel>
    </DataTemplate>
</Window.Resources>
<Grid>
    <ListBox ItemsSource="{Binding Path=Fields}"
             ItemTemplateSelector="{StaticResource fieldTemplateSelector}"
             HorizontalContentAlignment="Stretch">
    </ListBox>
</Grid>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-03 18:57:14

在我看来,这样做要好得多:

代码语言:javascript
复制
<DataTemplate x:Key="fieldStringTemplate">
   <TextBox Text="{Binding Path=FieldValue}" />
</DataTemplate>

<DataTemplate x:Key="fieldDateTemplate">
    <DatePicker SelectedDate="{Binding Path=FieldValue}" />
</DataTemplate>

<!-- and so on... -->

<DataTemplate x:Key="common">
   <StackPanel>
       <TextBlock Text="{Binding Path=Name}" />
       <TextBlock Text="{Binding Path=DisplayValue}" />
       <ContentPresenter Content="{Binding}" 
                         ContentTemplateSelector="{StaticResource fieldTemplateSelector}"/>
   </StackPanel>
</DataTemplate>

<ListBox ItemsSource="{Binding Path=Fields}"
         ItemTemplate="{StaticResource common}"
         HorizontalContentAlignment="Stretch">
</ListBox>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21535075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档