Проблема добавления холстов в стековую панель в коде в wpf
-
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>
И вы увидите желаемое расстояние.
Надеюсь, это поможет.