2

かなりの要素で構成される構造を作成したいのですが、基本的なレイアウトは次のようになります。

<UniformGrid>
  <Border>        // This one is 9x
    <UniformGrid> // This one is 9x, each as a child of the border
      <Border>    // This one is again 9x, so at total 9x9 = 81 of these
        <TextBox> // Same as above, each one as a child of the Border
        .....
        </TextBox>
      </Border>
    </UniformGrid>
</UniformGrid>

したがって、非常に多くのコントロールがあるため、どのソリューションがよりエレガントで適切なのか疑問に思っていました。

1: XAML

そのため、設計全体は XAML で行われます。これはかなりの記述であり、すべてのコントロールは XAML で手動でセットアップされます。

2: C# コード

したがって、メインの UniformGrid と 9 つの小さい Uniform グリッドだけが XAML を使用して作成され、他のすべてのものは動的に作成され、C# で記述されます。また、これが選択される場合は、コード側からボーダーに子を追加する方法を教えてください。今のところ、これが私の主な方法であり、私はそれを思いつきました:

    private void InitializeCells()
    {
        for (int i = 1; i <= 9; i++)
        {
            object foundControl = sudokuGrid.FindName("cellBorder" + i.ToString());
            Border foundGridControl = (Border)foundControl;
            for (int j = 1; j <= 9; j++)
            {
                TextBox cell = new TextBox();
                cell.MaxLength = 1;
                cell.FontSize = 30;
                cell.Name = "cell" + j.ToString();
                cell.VerticalContentAlignment = VerticalAlignment.Center;
                cell.HorizontalContentAlignment = HorizontalAlignment.Center;
                // HOW TO ADD CHILDREN????
            }
        }
    }
    private void InitializeCellBorders()
    {
        for (int i = 1; i <= 9; i++)
        {
            object foundControl = sudokuGrid.FindName("block" + i.ToString());
            UniformGrid foundGridControl = (UniformGrid)foundControl;
            for (int j = 1; j <= 9; j++)
            {
                Border cellBorder = new Border();
                cellBorder.Name = "cellBorder" + j.ToString();
                cellBorder.BorderBrush = Brushes.DodgerBlue;
                foundGridControl.Children.Add(cellBorder);
            }
        }
    }

3: 混合物

C# と XAML コードのある種の異なる混合物ですが、まだ思いつきません:)。

4

1 に答える 1

3

そのなかで何も。ItemsControlまたはその派生物の 1 つを使用します。

<ItemsControl ItemsSource="{Binding SomeCollectionOfViewModel}">
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
         <UniformGrid/>
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
   <ItemsControl.ItemTemplate>
       <DataTemplate>
          <ItemsControl ItemsSource="{Binding SomeCollection}">   <!-- Nested Content -->
              ...
       </DataTemplate>
   <ItemsControl.ItemTemplate>
</ItemsControl>
于 2013-06-30T16:51:22.843 に答える