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

StackOverflow https://stackoverflow.com/questions/1205851

  •  05-07-2019
  •  | 
  •  

Вопрос

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

  

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

     

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

     

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top