2017-01-08 6 views
0

コントロールツリーを別のグリッド列にプログラムでコピーしたいのですが、各プレイヤーのP2、P3、P4でコントロール名のP1を変更したいので、情報は各プレイヤーに負担をかけます。C#WPFコピーコントロールツリー

データはので、私はちょうどプレイヤーIDを交換する必要がありますでしょう、現在そのように設定IST:ここ

public void ReadPlayer(Player player) { 
     GetControl<Label>(player, "lbl", "Points").Content = String.Format("{0}/8", player.Points); 
     GetControl<Slider>(player, "sld", "Points").Value = player.Points; 

     GetControl<TextBox>(player, "txt", "PositionX").Text = player.PosX + ""; 
     GetControl<TextBox>(player, "txt", "PositionY").Text = player.PosY + ""; 
     GetControl<TextBox>(player, "txt", "PositionZ").Text = player.PosZ + ""; 

    } 

はXAMLです:

<GroupBox Header="Player 1" Name="grpP1" Margin="0,0,0,0"> 
      <Grid> 
       <GroupBox Header="Points" Height="122" Margin="6,6,6,0" VerticalAlignment="Top"> 
        <Grid> 
         <Label Height="28" Margin="6,0" Name="lblP1Points" VerticalAlignment="Top" HorizontalContentAlignment="Center" Width="199" Content="0/8" /> 
         <Slider Height="34" Margin="6,34,6,0" Name="sldP1Points" VerticalAlignment="Top" SmallChange="1" Minimum="0" Maximum="8" TickPlacement="Both" /> 
         <CheckBox Content="Freeze" Height="16" Margin="6,74,6,0" Name="chkP1Points" VerticalAlignment="Top" HorizontalContentAlignment="Left" /> 
        </Grid> 
       </GroupBox> 
       <GroupBox Header="Position" Height="121" Margin="6,134,6,0" VerticalAlignment="Top"> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="25" /> 
          <ColumnDefinition Width="*" /> 
          <ColumnDefinition Width="62" /> 
         </Grid.ColumnDefinitions> 
         <Label Content="X" Height="28" Margin="6,6,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="19" /> 
         <TextBox Height="23" Margin="6,9,6,0" Name="txtP1PositionX" VerticalAlignment="Top" Grid.Column="1" /> 
         <CheckBox Content="Freeze" Height="20" Margin="0,12,0,0" Name="chkP1PositionX" VerticalAlignment="Top" HorizontalAlignment="Left" Width="64" Grid.Column="2" /> 

         <Label Content="Y" Height="28" HorizontalAlignment="Left" Margin="6,35,0,0" VerticalAlignment="Top" Width="19" /> 
         <TextBox Height="23" Margin="6,39,6,0" Name="txtP1PositionY" VerticalAlignment="Top" Grid.Column="1" /> 
         <CheckBox Content="Freeze" Height="20" HorizontalAlignment="Left" Margin="0,41,0,0" Name="chkP1PositionY" VerticalAlignment="Top" Width="64" Grid.Column="2" /> 

         <Label Content="Z" Height="28" HorizontalAlignment="Left" Margin="6,64,0,0" VerticalAlignment="Top" Width="19" /> 
         <TextBox Height="23" Margin="6,68,6,0" Name="txtP1PositionZ" VerticalAlignment="Top" Grid.Column="1" /> 
         <CheckBox Content="Freeze" Height="20" HorizontalAlignment="Left" Margin="0,70,0,0" Name="chkP1PositionZ" VerticalAlignment="Top" Width="64" Grid.Column="2" /> 
        </Grid> 
       </GroupBox> 
      </Grid> 
     </GroupBox> 

完全なコードはここを参照してください:https://github.com/SciLor/MashedTrainer

答えて

1

WPFでコントロールツリーをコピーするのは良い方法ではありません。

MVVMのパラダイムである には、データのビューモデルクラスを定義し、データテンプレート、スタイル、データバインディングを使用してビューを構築する必要があります。

プレーヤークラスのデータテンプレートは、ビューとして機能し、プレーヤーを表示する方法を理解し、データバインディングを使用してプレーヤーのプロパティにバインドする必要があります。

リストコントロールのプレーヤーまたはプレーヤーのコレクションをcontentプロパティとして配置すると、wpfはそれらをすべてレンダリングできます。

ウェブ上のトピックには多くのリソースがあります。まず、this simple MVVM exampledata binding overviewをご覧ください。

+0

どうすればいいですか? – Schnulli

+0

@Schnulli、私はいくつかのリンクを追加しましたが、もっとGoogleのために自由に感じてください、それらのトピックに関する記事がたくさんあります。がんばろう! – ironstone13