pap*_*zzo 0 .net wpf datatemplate itemtemplateselector
见下文,所有 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>
Run Code Online (Sandbox Code Playgroud)
在我看来,做这样的事情会好得多:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |