1

ボタンのマトリックス(動的グリッドサイズ)を動的に生成していますが、それらの間にスペースがないと取得できないことを除いて、すべてが完璧です.margin属性の使用方法を試しましたが、理解できませんでした.

gridPanel460 は、ボタンを追加する幅と高さです

これが私のapp.csファイルのコードです

private void generateButtons()
{
    for (int i = 0; i < gridSize; i++)
    {
        for (int j = 0; j < gridSize; j++)
        {
            buttons[i, j] = new Button();
            buttons[i, j].Content = "0";
            buttons[i, j].FontSize = 16;
            buttons[i, j].Height = 460/gridSize;
            double size = buttons[i, j].Height;
            buttons[i, j].Width = 460/gridSize;
            buttons[i, j].Foreground = new SolidColorBrush(Colors.Transparent);
            opened[i, j] = false;
            buttons[i, j].Margin = new Thickness(0 + (size * j), 0 + (size * i), 464 -                    (0 + (size * (j + 1))), 464 - (0 + (size * (i + 1))));
            buttons[i, j].Click += new RoutedEventHandler(cell_Click);
            this.gridPanel.Children.Add(buttons[i, j]);
        }
    }
}
4

1 に答える 1

1

Windows Phone のほとんどの「入力コントロール」 (ボタン、テキスト ボックスなど) のデフォルトの間隔は 6.0 または 12.0 です。簡単な回避策は、ボタンの余白を -12 だけ調整することです。

質問とは無関係の提案 - グリッドにボタンを一様に配置したい場合は、必要な数の行と列を生成し、すべてのボタンを別のセルに配置する方がおそらく簡単でしょう (button.margin は常に -12 に等しくなります) )。すべてのサイズ計算はグリッドによって行われます。このように (gridPanel は Grid です)。

// generate rows and columns
for (int i = 0; i < gridSize; i++)
{
    gridPanel.RowDefinitions.Add(new RowDefinition());
    gridPanel.ColumnDefinitions.Add(new ColumnDefinition());
}

for (int i = 0; i < gridSize; i++)
{
    for (int j = 0; j < gridSize; j++)
    {
        buttons[i, j] = new Button
            {
                Content = "0",
                FontSize = 16,
                Foreground = new SolidColorBrush(Colors.Transparent),
                // all buttons have the same margin, no calculation needed
                Margin = new Thickness(-12) 
            };
        // placing in a row and column via attached properties
        buttons[i, j].SetValue(Grid.RowProperty, i);
        buttons[i, j].SetValue(Grid.ColumnProperty, j);
        buttons[i, j].Click += new RoutedEventHandler(cell_Click);
        opened[i, j] = false;
        this.gridPanel.Children.Add(buttons[i, j]);
    }
}
于 2013-10-03T20:20:51.777 に答える