2011-06-20 5 views
2

私は画面上にグリッドを描き、ユーザーがクリックするたびにその特定の領域に画像を描画する必要があります。クリック可能な矩形でグリッドを描く

グリッドの描画方法がわかりません。正方形は固定サイズ(32×32ピクセル)ですが、その数は可変です。私はNxN細胞グリッドを持つことができました。また、このグリッドは、そのサイズが可変であるため、スクロールペイン内にある必要があります。 誰もそのグリッドを描画し、正方形をクリックする方法を知っていますか?

私はWPFを使用しています。

ありがとうございました。

答えて

1

使用ScrollViewerGridオブジェクト生成後、スクロール機能に

<ScrollViewer x:Name="layoutRoot" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"/> 

を有効にする:私はマウスクリックについて知っておく必要があり、多くの場合

private Grid GenerateGrid(int rows, int columns, int cellWidth, int cellHeight) 
{ 
    Grid grid = new Grid(); 
    grid.Width = columns * cellWidth; 
    grid.Height = rows * cellHeight; 

    for (int i = 0; i < rows; i++) 
    { 
     grid.RowDefinitions.Add(new RowDefinition()); 
    } 

    for (int i = 0; i < columns; i++) 
    { 
     grid.ColumnDefinitions.Add(new ColumnDefinition()); 
    } 

    for (int i = 0; i < rows; i++) 
    { 
     for (int j = 0; j < columns; j++) 
     { 
      var cell = new Border(); 
      cell.MouseDown += Cell_MouseDown; 
      Grid.SetRow(cell, i); 
      Grid.SetColumn(cell, j); 
      cell.Background = Brushes.Transparent; 

       cell.BorderBrush = Brushes.Gray; 
       cell.BorderThickness = new Thickness(1); 
      grid.Children.Add(cell); 
     } 
    } 

    return grid; 
} 

private void Cell_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    var cell = sender as Border; //You can use this object 
} 
+0

が表示されます。御時間ありがとうございます。私はそれが線を印刷していないのを見て、正しい?もう1つの質問ですが、私はC#の初心者です。私はJava開発者です。このCell_MouseDownは、マウスを押すと自動的に起動されますか?もしそうなら、私はちょうどあなたの素晴らしい例に示すように背景画像を変更することができます:) – eestein

+0

「cell.MouseDown + = Cell_MouseDown;」によって、各セルは 'Cell_MouseDown'イベントを引き起こします。ラインの場合は、各セルにボーダーブラシを設定するだけです。 –

+0

Ok。私がやっていることは私のJavaゲームのマップエディタです。私はちょうどそれを学ぶためにWPFを使用して開発しています。ご協力いただきありがとうございます。宜しくお願いします。 – eestein

0

を、私はボタンをサブクラス化する傾向があります。マウス操作の基本イベントを管理するのはやや厄介なことがわかりますが、それを行うこともできますし、重要であれば軽い体重になります。いずれにしても、カスタムコントロールやユーザーコントロールを作成する場合は、必要なものをすべて用意する必要があります。 OnClick(サブクラスButtonの場合)またはOnPreviewMouseLeftButtonDown、OnPreviewMouseLeftButtonUp、OnMouseEnter、およびOnMouseLeaveの4つすべてをオーバーライドして、自分で管理することができます。あなたのコントロールでマウスがダウンしたかどうかを知る必要があるので、マウスアップだけをキャプチャするだけでは不十分です。ちょっと複雑なので、ボタンの標準的なクリック動作を見て、それを複製することをお勧めします。

UniformGridを調べて、グリッドのニーズを満たしているかどうかを確認することができます。これは、可変数の列と行を必要とするためです。あなたはどちらかの数を設定することができ、それらの間に子供たちが流れます。ここで使用するコントロールは、ScrollViewer内に配置してスクロール機能を使用することができます。

+0

ボタンを使用する際の問題点は、マウスを使用して複数のセルを同時に選択できることです(マウスポインタをドラッグする)。それとも問題じゃないの? – eestein

+0

私はそれが必要条件であることを認識していませんでした。それは、おそらくマウスイベントを見ることが必要であるほど複雑なものになります。プレビュー版のイベントを試して、セルにコンテンツを追加した後で実際に期待しているイベントが得られることを確認する必要があります。 – dinane

関連する問題