2017-04-03 49 views
-2

不幸的是,我不得不在WPF中創建一個應用程序在學校。我不太瞭解它,但我很瞭解Javascript和一些JS框架。 使用Ember/Handelbars,創建模板非常簡單。對於動態模板,我的意思是:我有一個標記(xaml),我可以放入數據/模型,模板根據數據進行渲染。然後,我可以多次使用此模板,每次放入不同的模型。WPF:有什麼辦法來創建動態模板

如何在WPF中創建動態模板? 目前,我有

<Page.Resources> 
    <Grid x:Key="char" Margin="-5,5,5,0"> 
    <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap" Text="{Binding Path=variableModel.Name}" FontSize="16" Height="18"/> 
    <ProgressBar Maximum="{Binding Path=variableModel.MaxHealth, Mode=OneWay}" Value="{Binding Path=variableModel.Health, Mode=OneWay}" Height="8"/> 
    </Grid> 
</Page.Resources> 

我怎樣才能使它的動態,使敵人是可變數據? 然後我可以多次使用它像:

<StaticResource ResourceKey="char" variableModel="enemy"/> 
<StaticResource ResourceKey="char" variableModel="player"/> 

所以現在我會顯示兩條charakters,一個是敵人模型和奧德玩家。兩者都使用相同的模板。

我知道有一些風格或數據模板,但我不知道如何使多個元素一個模板...

+0

「使敵人可變數據」我需要一個動詞-.- – Yoda

+0

你有沒有在你的視圖模型實現INotifyPropertyChanged的? – Default

+1

_ **不幸**我必須在school_中創建一個WPF應用程序 - 然後我害怕你錯了學校:) – Fabio

回答

1

定義DataTemplate

<Page.Resources> 
    <DataTemplate x:Key="char"> 
     <StackPanel Margin="-5,5,5,0"> 
      <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap" Text="{Binding Path=Name}" FontSize="16" Height="18"/> 
      <ProgressBar Maximum="{Binding Path=MaxHealth, Mode=OneWay}" Value="{Binding Path=Health, Mode=OneWay}" Height="8"/> 
     </StackPanel> 
    </DataTemplate> 
</Page.Resources> 

然後,您可以使用ContentControl並設置爲Content屬性的類的實例具有Name,HealthMaxHealth屬性:

<ContentControl x:Name="cc" ContentTemplate="{StaticResource char}" /> 

cc.Content = new Player(); 
相關問題