Содержимое таблицы элементов WPF исчезает на полпути вниз

#wpf #xaml #tabs

#wpf #xaml #Вкладки

Вопрос:

У меня странная проблема. У меня есть TabControl, созданный следующим образом:

 <TabControl HorizontalAlignment="Stretch" Name="tabControl" VerticalAlignment="Stretch" FontSize="10">
...
</TanControl>
 

с несколькими вкладками, созданными следующим образом:

 <TabItem Header="XXXX" Name="tab1">
...
</TabItem>
 

Внутри каждой вкладки у меня есть сетка, следуя коду, сгенерированному перетаскиванием панели инструментов, я начал добавлять данные в первый элемент управления следующим образом:

 <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Label Grid.Column="0" Content="XXXX:" Margin="1,6" Height="28" HorizontalAlignment="Right" Name="label001" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="0" Content="XXXX:" Margin="1,34" Height="28" HorizontalAlignment="Right" Name="label002" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="0" Content="XXXX:" Margin="1,62" Height="28" HorizontalAlignment="Right" Name="label003" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="0" Content="XXXX:" Margin="1,90" Height="28" HorizontalAlignment="Right" Name="label004" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="0" Content="XXXX:" Margin="1,130" Height="28" HorizontalAlignment="Right" Name="label005" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="0" Content="XXXX:" Margin="1,158" Height="28" HorizontalAlignment="Right" Name="label006" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="0" Content="XXXX:" Margin="1,186" Height="28" HorizontalAlignment="Right" Name="label007" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="0" Content="XXXX:" Margin="1,226" Height="28" HorizontalAlignment="Right" Name="label008" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="0" Content="XXXX:" Margin="1,254" Height="28" HorizontalAlignment="Right" Name="label009" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="1" Content="XXXX" Margin="1,254" Height="28" HorizontalAlignment="Left" Name="lbl1" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="0" Content="XXXX:" Margin="1,282" Height="28" HorizontalAlignment="Right" Name="label010" VerticalAlignment="Top" FontSize="12" />
    <Label Grid.Column="1" Content="XXXX" Margin="1,282" Height="28" HorizontalAlignment="Left" Name="lbl2" VerticalAlignment="Top" FontSize="12" />
</Grid>
 

Проблема в том, что после размещения метки дальше, чем на полпути в сетке, она исчезает. Если я изменю размер окна, чтобы оно было больше, я смогу увидеть больше элементов, потому что они уже не прошли половину пути, если я уменьшу его, то больше исчезнет, потому что они проходят половину пути.

Я пробовал добавлять строки в сетку, и они все равно исчезают! Странная часть заключается в том, что если я добавлю n строк и разделю метки между ними, каждая строка будет обрезана на полпути в каждой строке.

Эта проблема также проявляется в представлении конструктора, но только если наложено вертикальное ограничение, например, высота строки или максимальная высота окна (поскольку представление конструктора растягивает контейнеры, чтобы вместить все содержимое, когда я их добавляю).

И, наконец, столбцы никогда не исчезают на полпути, какими бы маленькими они ни были.

Ответ №1:

Значение Margin=»20,50″ будет интерпретироваться как значение толщины, для которой значение Left и Right равно 20, а значение Top и Bottom равно 50. Из MSDN

Таким образом, поле «1,282» последней метки совпадает с «1,282,1,282» (слева, сверху, справа, снизу). Простой способ решить вашу проблему — изменить поля каждой метки на «X, X, 1, 0».

Вы используете Margin для управления положением каждого элемента управления, но я рекомендую вам использовать прикрепленные свойства элементов управления макетом WPF для управления положением. Например, для Gird есть Gird .Строка и сетка.Столбец и для DockPannel есть Dock.Вверху и закрепите.Осталось и т. Д. Для решения этой проблемы, пожалуйста, обратитесь к Использовать обзор автоматической компоновки.

Комментарии:

1. Хорошо, добавление левого и верхнего полей обратно в метки устранило проблему. Из того, что я собрал, когда вы устанавливаете Margin=»i,j», i — это поле от горизонтального выравнивания, а j — это поле от вертикального выравнивания. Позиции моих элементов отражают это. Я бы понял, если бы мои позиции были неправильными, но поскольку они правильные, я не понимаю, что заставило бы их исчезнуть. Я приму ваш ответ, потому что он устранил мою проблему, но я хотел бы узнать больше.

2. Если вы задаете поле метки как 1,282, что совпадает с 1,282,1,282, а высота главного окна меньше 282 * 2, то метка не будет отображаться из-за нехватки места. Вы можете установить поле равным 1,282,1,0, чтобы метка отображалась в правильном положении. Я рекомендую вам установить фон метки, чтобы определить область метки, например <Label Grid.Column="1" Content="XXXX" Margin="1,282" Background="Yellow" />