2010-11-01 4 views
4

У меня есть список WPF, который виртуализирован с большим количеством строк. При переходе по объектам список изменяется в размере. Я пробовал:Правильно установить ширину виртуализованного списка в WPF

<Setter Property="MinWidth" Value="{Binding Path=ExtentWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollViewer}}}" /> 

К сожалению, у меня не хватает репутации размещать мои фотографии этой проблемы, но в основном, когда я пролистать виртуализированных списка, ширина изменений коробки, как более длинные элементы являются встречается. Я полагаю, что я мог бы попытаться измерить самую длинную строку в коде и установить ширину этого значения, но я надеюсь, что есть более чистое решение.

Вот мой текущий шаблон управления (без кости):

 <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
        <Border x:Name="ListItemContainer" 
          MinWidth="{Binding Path=ExtentWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollViewer}}}" 
          BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> 
         <ContentPresenter></ContentPresenter>            
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="true">        
          <Setter Property="Background" TargetName="ListItemContainer" Value="{DynamicResource AxisValueSelectedBackground}"/> 
          <Setter Property="Foreground" Value="{DynamicResource AxisValueSelectedForeground}"/> 
         </Trigger> 

         <Trigger Property="IsSelected" Value="false"> 
          <Setter Property="Background" TargetName="ListItemContainer" Value="{DynamicResource AxisValueBackground}"/> 
          <Setter Property="Foreground" Value="{Binding IsEnabled, Converter={StaticResource AxisValueForegroundConverter}}" /> 
          <Setter Property="FontStyle" Value="{Binding IsEnabled, Converter={StaticResource AxisValueFontStyleConverter}}" /> 
         </Trigger> 

         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding IsAxisSelected}" Value="True"/> 
           <Condition Binding="{Binding IsAxisValueSelected}" Value="False"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Background" TargetName="ListItemContainer" Value="White" /> 
         </MultiDataTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

alt text alt text

ответ

2

Попробуйте такой же относительный связывающий трюк, но в пределах самого внешнего элемента вашего DataTemplate в (возможно, сетке). Таким образом, элементы имеют одинаковый размер.

Смежные вопросы