Проблема добавления холстов в стековую панель в коде в wpf - PullRequest
1 голос
/ 30 июля 2009

У меня точно такая же проблема, как указано (в форме здесь , но без ответа):

Я добавляю элементы управления в StackPanel через StackPanel.Childrens.Add ().

Но что я вижу - все элементы управления добавлены мной, в том же положении и перекрывают друг друга. Они не будучи макет внутри StackPanel.

Даже StackPanel.UpdateLayout () приносит мне ничего.

Я для себя пытаюсь добавить Canvas es (да, они мне нужны) к StackPanel. Есть идеи?

1 Ответ

7 голосов
/ 30 июля 2009

Вы установили явные размеры на своих холстах? Размеры холстов не соответствуют размеру их содержимого, поэтому, если вы не укажете размер холста явно, когда вы поместите их все в панель стека, их содержимое будет отображаться поверх друг друга, как вы объясните. Это связано с тем, что позиция (0,0), относительно которой располагаются дочерние элементы холста, будет находиться в верхнем левом углу панели стека (одинаковая точка для всех холстов и всех их дочерних элементов).

Попробуйте следующее в Kaxaml , чтобы выделить ситуацию:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <StackPanel>
    <Canvas>
      <TextBlock Text="Child of canvas one" />
    </Canvas>
    <Canvas>
      <TextBlock Text="Child of canvas two" />
    </Canvas>
  </StackPanel>
</Page>

Вы увидите, что две строки текста накладываются друг на друга.

Теперь попробуйте это:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <StackPanel>
    <Canvas Height="15">
      <TextBlock Text="Child of canvas one" />
    </Canvas>
    <Canvas Height="15">
      <TextBlock Text="Child of canvas two" />
    </Canvas>
  </StackPanel>
</Page>

И вы увидите желаемое расстояние.

Надеюсь, это поможет.

...