WPF: ScrollViewer на 4px меньше, чем ListView
Я наткнулся на очень странную "особенность" ListView. Надеюсь, кто-нибудь сможет мне помочь.
Когда вы создаете ListView в своем окне,он поставляется с интервалом по умолчанию между границей и содержимым. Я думаю, что это заполнение 2 (слева и справа), если вы посмотрите на информацию о Snoop. ListBoxChrome (часть ListView)в моем случае имеет ширину 363px. ScrollViewer внутри него-359px. На обоих этих пультах управления ничего не установлено. Даже новый проект с простым ListView имеет эту проблему.
Один обходной путь состоит в том, чтобы дать ячейкам заголовка заполнение -2, но по какой-то причине заголовки не заполняются до тех пор, пока справа не останется более широкий пробел справа.
Кто-то здесь, чтобы помочь мне?
Некоторые скриншоты:
1 ответ:
Это комбинация
BorderThickness
иPadding
из элементаBorder
(каждый вклад в 2px. 1 пиксель 1 пиксель слева и справа).Вы можете установить
<ListView BorderThickness="0">
И loose 2px, однако
Padding
по крайней мере в Windows-8 устанавливается непосредственно на элемент управленияBorder
в шаблоне по умолчанию и не будет иметь никакого эффекта, если установить непосредственно наListView
Извлечение из default
Style
forListView
<ControlTemplate TargetType="{x:Type ListView}"> <Border x:Name="Bd" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="1" SnapsToDevicePixels="true">
Самый простой вариант-предоставить пользовательский
Style
, где вы настраиваете это значениеPadding
, чтобы 0. Вы также можете использовать поведение и получить ссылку на пограничный контроль и переопределение заполнения в коде.Если вы выберете опцию code-behind для переопределения
Padding
, очень грубый способ установить заполнение может быть следующим:public MainWindow() { InitializeComponent(); Loaded += (sender, args) => { var border = (Border)lv.Template.FindName("Bd", lv); border.Padding = new Thickness(0); }; }
И ваш xaml:
<ListView x:Name="lv" BorderThickness="0">