动态切换控件类型以显示不同的内容类型

本文关键字:类型 控件 动态 显示 | 更新日期: 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上的数据模板概述页面了解更多详细信息。