在我的应用程序(Windows 8.1)中,我使用拆分Visual Studio模板。它正在工作,如果我选择一个项目,我可以显示文本内容。
内容与文字,图片,pdf混合在一起。
那么如何根据内容数据动态切换控件类型(例如TextBlock,Image,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" />
答案 0 :(得分:0)
您的问题的答案是您使用DataTemplate
来定义应在UI中呈现每种数据类型的方式。您需要做的就是为每种不同的数据类型声明DataTemplate
:
<DataTemplate DataType="{x:Type System:String}">
<TextBlock Text="{Binding}">
</DataTemplate>
...
<DataTemplate DataType="{x:Type Custom:DataObject}">
<UserControl DataContext="{Binding}">
</DataTemplate>
如果省略x:Key
引用(如上例所示),那么只要遇到某个指定的数据类型,Framework就会自动呈现相关DataTemplate
的内容。有关详细信息,请参阅MSDN上的Data Templating Overview页面。