Проблема добавления холстов в стековую панель в коде в wpf

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

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

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

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

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

1 ответ

Решение

Вы установили явные размеры на своих холстах? Размеры холстов не соответствуют размеру их содержимого, поэтому, если вы не укажете размер холста явно, когда вы поместите их все в панель стека, их содержимое будет отображаться поверх друг друга, как вы объясните. Это связано с тем, что позиция (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>

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

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

Другие вопросы по тегам