У меня похожая проблема, когда я хочу, чтобы в некоторых строках содержался элемент, охватывающий несколько столбцов, который начинается в 5-м (из девяти) столбцах. Я реализовал вариант ответа @ PeteVasi с двумя основными изменениями:
- Вы хотите связать с
ActualWidth
, а не Width
, или это не работает, когда, например, колонки имеют авторазмер.
- Вы можете использовать
RelativeSource
, чтобы не указывать myListView
по имени (что делает его более подходящим для использования в ресурсе стиля).
Для этого измените назначение Width
в записях ColumnDefinition
из этого:
Width="{Binding ElementName=myListView, Path=View.Columns[0].Width}"
к этому:
Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type ListView}}, Path=View.Columns[0].ActualWidth}"
Кроме того, вам не нужно использовать вложенный <Grid>
, и если вы хотите сохранить эффекты наведения мыши и выделения, вам нужно клонировать стиль по умолчанию.
Я экспериментировал с небольшим вариантом ответа, который использует GridViewRowPresenter
, и играл с плохой идеей (отслеживая события изменения размера столбца и используя их, чтобы установить свойство, к которому привязана ширина столбца). Различные эксперименты, включая полностью стилизованную версию, можно найти в проекте DisasmUiTest на github .