2014-05-21 27 views
0

在我的應用程序(Windows 8.1)中,我使用拆分的Visual Studio模板。它正在工作,如果我選擇一個項目,我可以顯示文本內容。動態切換控件類型以顯示不同的內容類型

內容與文字,圖像,pdfs混合。

那麼如何根據內容數據動態地切換控件類型(例如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

的回答你的問題是你使用DataTemplate s到如何定義每個數據類型,應在用戶界面中呈現。所有你需要做的就是申報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上的Data Templating Overview頁面以獲取更多詳細信息。

+0

嗯......我認爲OP使用的是WinRT,WinRT中沒有'{x:Type}'。 –

+0

啊......我想知道什麼是'分裂的Visual Studio模板'。 – Sheridan

+0

哦,謝謝,是的,我正在使用WinRT。也許這也可以通過'DataTemplateSelector'實現。但我的內容類型始終是字符串。如果我得到一張圖片或PDF,我只能得到鏈接。那麼我怎麼才能區分'DataTemplate'用於在我的應用中顯示它? – GermanSniper