簡體   English   中英

DataTemplate包含另一個DataTemplate

[英]DataTemplate Include Another DataTemplate

請參閱下面的所有DataTemplates都有相同的前兩個TextBlock。
在fieldStringTemplate和fieldDateTemplate中,我想引用fieldTemplate,所以我不重復這兩個。
如何從DataTemplate引用DataTemplate?

真正的應用程序有更多模板和更多常見元素。
在實際應用程序中,這些是實現Field的類。
FieldTemplateSelector基於類。

<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>

在我看來,做這樣的事情要好得多:

<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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM