У меня простая сетка.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="35" />
<RowDefinition Height="35" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<Canvas Grid.Column="0" Grid.Row="0" Width="1600" Height="35" Background="Black" />
<TextBlock Grid.Column="0" Grid.Row="1" Width="1600" FontSize="20"
Text="this is a sample text which respects the borders of the grid" />
</Grid>
Что приводит к:
Теперь мне действительно интересно, почему холст рисуется над своим столбцом в следующий столбец, а текст - нет. Я ожидал бы такого поведения, если бы установил для свойства ColumnSpan значение как минимум 2. Но это не так, и Canvas не заботится о явном ColumnSpan.
Есть ли в этом причина? Могу ли я ограничить холст столбцом, не уменьшая его ширину?
2 ответа
Обходной путь для этой проблемы - поместить холст на другую панель, которая уважает родительскую ширину, например StackPanel:
<StackPanel Grid.Column="0"
Grid.Row="0"
Orientation="Horizontal">
<Canvas Background="Black"
Width="1600"
Height="35" />
</StackPanel>
Или даже когда вы помещаете какой-либо элемент во второй столбец первой строки, этот элемент будет на переднем плане, а холст будет на заднем плане и, следовательно, не будет виден.
Ваша первая ширина ColumnDefinition - это размер звезды, что означает, что она займет всю доступную ширину после выделения ширины столбцам с автоматическим размером. С уважением, ваш холст не рисуется поверх другого столбца, а его ширина (1600 пикселей) слишком велика.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.