У меня простая сетка.

<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>

Что приводит к:

Canvas vs text

Теперь мне действительно интересно, почему холст рисуется над своим столбцом в следующий столбец, а текст - нет. Я ожидал бы такого поведения, если бы установил для свойства ColumnSpan значение как минимум 2. Но это не так, и Canvas не заботится о явном ColumnSpan.

Есть ли в этом причина? Могу ли я ограничить холст столбцом, не уменьшая его ширину?

0
Martin Tausch 30 Июл 2014 в 13:31

2 ответа

Лучший ответ

Обходной путь для этой проблемы - поместить холст на другую панель, которая уважает родительскую ширину, например StackPanel:

<StackPanel  Grid.Column="0"
                 Grid.Row="0"
                 Orientation="Horizontal">
        <Canvas Background="Black"
                Width="1600"
                Height="35" />
    </StackPanel>

Или даже когда вы помещаете какой-либо элемент во второй столбец первой строки, этот элемент будет на переднем плане, а холст будет на заднем плане и, следовательно, не будет виден.

1
user1246682 30 Июл 2014 в 14:43
Да, работает. Но мне очень хотелось бы знать, почему он так себя ведет ^^
 – 
Martin Tausch
30 Июл 2014 в 14:51

Ваша первая ширина ColumnDefinition - это размер звезды, что означает, что она займет всю доступную ширину после выделения ширины столбцам с автоматическим размером. С уважением, ваш холст не рисуется поверх другого столбца, а его ширина (1600 пикселей) слишком велика.

0
Jawahar 30 Июл 2014 в 13:48
Я также могу установить ширину текстового элемента на «1600», а пробел (второй столбец шириной «50») с правой стороны все еще существует...
 – 
Martin Tausch
30 Июл 2014 в 13:52
Установка ширины в TextBlock просто ничего не может сделать, если длина текста меньше.
 – 
Jawahar
30 Июл 2014 в 13:58
Как вы можете видеть в коде, текст обрезается с правой стороны, а холст — нет.
 – 
Martin Tausch
30 Июл 2014 в 13:59