动态切换控件类型以显示不同的内容类型
本文关键字:类型 控件 动态 显示 | 更新日期: 2023-09-27 18:04:21
在我的应用程序(windows 8.1),我使用分割Visual Studio模板。它正在工作,如果我选择一个项目,我可以显示文本内容。
内容混合了文本、图像、pdf文件。
那么我怎么能动态切换控制类型(如TextBlock,图像,UserControl)基于内容数据?
如果我得到文本,它应该显示在一个TextBlock,但如果我得到一个图像(链接),它应该显示在一个图像控件。(也许切换控件类型的方式是错误的,我不知道!?)
我可以在XAML中解决这个问题,还是应该在后面的代码中解决?
我不知道我该怎么做。谁能给我点提示吗?
<Grid x:Name="itemDetailGrid" Margin="0,60,0,50">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Source="{Binding ImagePath}" Grid.Row="1" Margin="0,0,20,0" Width="180" Height="180" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
<StackPanel x:Name="itemDetailTitlePanel" Grid.Row="1" Grid.Column="1">
<TextBlock x:Name="itemTitle" Margin="0,-10,0,0" Text="{Binding Title}" Style="{StaticResource SubheaderTextBlockStyle}"/>
<TextBlock x:Name="itemSubtitle" Margin="0,0,0,20" Text="{Binding Subtitle}" Style="{StaticResource SubtitleTextBlockStyle}"/>
</StackPanel>
<!-- <TextBlock Grid.Row="2" Grid.ColumnSpan="2" Margin="0,20,0,0" Text="{Binding Content}" Style="{StaticResource BodyTextBlockStyle}"/> -->
<Image Source="{Binding Content}" Grid.ColumnSpan="2" Grid.Row="2" Margin="0,20,0,0" Stretch="UniformToFill" />
您的问题的答案是使用DataTemplate
s来定义如何在UI中呈现每种数据类型。您所需要做的就是为每个不同的数据类型声明一个DataTemplate
:
<DataTemplate DataType="{x:Type System:String}">
<TextBlock Text="{Binding}">
</DataTemplate>
...
<DataTemplate DataType="{x:Type Custom:DataObject}">
<UserControl DataContext="{Binding}">
</DataTemplate>
如果省略x:Key
引用(如上面的示例),那么框架将在遇到指定的数据类型之一时自动呈现相关DataTemplate
的内容。请参阅MSDN上的数据模板概述页面了解更多详细信息。