1

私は WPF アプリケーションの作成を学んでいて、宿題を出しました。wpf mvvm "tron lightcycle game" を作成する必要がありますが、残念ながら行き詰まりました。

ビュー (Mainwindow.xaml) には Canvas があります。ここに描けばいいのに。

...    
<Canvas Name="cnvs_game" Margin="5,5,5,5">
...

ViewModel には GameData クラスと Timer があります。GameData の更新 (GameTime,Player1CanvasPosition (Point),...) を刻むたびに。

次のように Gametime を View に入札します。

メインウィンドウ.xaml.cs:

...
<TextBlock Text="{Binding GameTime}" />
...

ViewModel.cs:

...
private GameData _GameData;
...
public String GameTime { get { return _GameData.GameTime.ToString(); } }
...

private void GameTimer_Tick(object sender, EventArgs e)
{
    _GameData.Step();
    OnPropertyChanged("GameTime"); // PropertyChanged with error handling
    OnPropertyChanged("Player1CanvasPosition ");
    OnPropertyChanged("Player2CanvasPosition ");
}

ビューでの GameTime の更新。難しくありませんでした。しかし、私はまだ描き方がわかりません。

Player1CanvasPosition を取得し、(キャンバス内に) Rectangle を描画するにはどうすればよいですか。これを行う最善の方法は何ですか?お願い助けて!:S

4

1 に答える 1

2

これは、GameTime で行ったのと同じ方法で行うことができます。次に例を示します。

<Canvas Name="cnvs_game" Margin="5,5,5,5">
    <Rectangle Canvas.Left="{Binding Player1CanvasPositionX}" Canvas.Top="{Binding Player1CanvasPositionY}" ... />
    <Rectangle Canvas.Left="{Binding Player2CanvasPositionX}" Canvas.Top="{Binding Player2CanvasPositionY}" ... />
 ...

そして、OnPropertyChanged を呼び出す ViewModel に Player1CanvasPositionX プロパティを作成すると、ViewModel のプロパティを変更すると、長方形が移動します。

編集: 四角形を動的に追加するには、位置の ObservableCollection にバインドされている ItemsControl を使用します。ItemsControl データ テンプレートには、位置にバインドする四角形が含まれます。詳細については、このリンクを参照してください。WPF キャンバス、MVVM コード ビハインドで子を動的に追加する方法

于 2012-12-04T08:51:07.160 に答える