На этот раз мой вопрос настолько прост, насколько это звучит ... как получить текст для переноса в WPF TreeViewItem
?
У меня есть простой HierarchicalDataTemplate
с одним TextBlock
.
<TextBlock Text="{Binding Value}" TextWrapping="Wrap" />
Текст не переносится.
Я пытался связать Width
TextBlock
с ActualWidth
TreeView
, но, хотя это делает перенос текста, Width
TreeViewItem
не помещается в TreeView
потому что TreeView
имеет Padding
. Привязка к ActualWidth
из TreeViewItem
имеет (неудивительно) тот же эффект. Другим недостатком этого является то, что даже элементы с небольшим текстом простираются за пределы TreeView
.
<TextBlock Text="{Binding Value}" TextWrapping="Wrap" Width="{Binding ActualWidth,
ElementName=TreeView}" />
Конечно, должен быть лучший способ, например, как-то информировать TreeViewItem
о границах TreeView
... Я не могу поверить, что он не знает автоматически. Но как я могу это сделать?
ОБНОВЛЕНИЕ >>>
Благодаря ответу Х.Б. мне удалось изменить Grid.ColumnSpan
на 2 на Bd
Border
, который он упомянул в ControlTemplate
, и он установил ширину, чтобы текст теперь хорошо переносился. Проблема в том, что я использую это ControlTemplate
для других TreeViewItem
s в других TreeView
s, где я не хочу элементы полной ширины.
Решение, которое я нашел, простое. Я связал значение TreeViewItem.Tag
со свойством Grid.ColumnSpan
в ControlTemplate
следующим образом:
<Border Grid.ColumnSpan="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}"
Name="Bd" Grid.Column="1" ... />
Это позволяет мне изменить Grid.ColumnSpan
и, следовательно, поведение полной или обычной ширины TreeViewItem
, установив для значения TreeViewItem.Tag
либо 2, либо 1 соответственно.