Проблема добавления холстов в стековую панель в коде в wpf
У меня точно такая же проблема, как указано (взято здесь, но без ответа):
Я добавляю элементы управления в StackPanel через StackPanel.Childrens.Add().
Но то, что я вижу - все элементы управления, добавленные мной, находятся в одинаковом положении и перекрывают друг друга. Они не являются макетом внутри StackPanel.
Даже StackPanel.UpdateLayout() мне ничего не приносит.
Я для себя пытаюсь добавить Canvas
ES (да, они мне нужны) к 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>
И вы увидите расстояние, которое вы желаете.
Надеюсь, это поможет.