2010-07-27 34 views
2

Je voudrais que les éléments de mon ListView se développer pour occuper toute la largeur de l'espace disponible dans le ListView.Définir les éléments de liste à croître à la largeur de la liste contenant ListView - WPF

Actuellement, j'ai la largeur de l'élément comme cela (le ListView est nommé listView):

Width="{Binding ActualWidth, ElementName=listView, Mode=OneWay}" 

Les éléments prendront la largeur de la ListView. Cependant, la barre de défilement verticale n'est pas prise en compte. Si la barre de défilement est présente, elle est dessinée sur le bord droit des éléments.

Est-il possible de résoudre ce problème?

+1

Je ne sais pas ce que vous voulez ici - est-il pas la valeur par défaut pour ListViewItems d'utiliser pleinement largeur? –

+0

Je n'utilise pas ListViewItem, j'utilise un ItemTemplate pour définir l'affichage d'une liaison ItemsSource. – oillio

Répondre

2

Je résolu ce problème en faisant référence directement le ItemsPresenter. Pour ce faire, j'ai dû définir un modèle pour la Viewbox et nommer le ItemsPresenter.

Le modèle ressemble à ceci:

<ListView.Template> 
    <ControlTemplate TargetType="{x:Type ListView}"> 
     <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true"> 
      <ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}"> 
       <ItemsPresenter x:Name="MLVItemsPresenter" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
      </ScrollViewer> 
     </Border> 
     <--SNIP--> 
    </ControlTemplate> 
</ListView.Template> 

et la liaison ressemble à la largeur: ce

Width="{Binding ActualWidth, ElementName=MLVItemsPresenter, Mode=OneWay}" 
0

ActualWidth comprend la barre de défilement, donc je ne pense pas qu'il y aura un moyen de résoudre ce problème. Qu'en est-il de l'utilisation d'un ViewBox?

+0

Comment utiliser une Viewbox? Si j'emballe mes articles dans une Viewbox, toutes sortes de mauvaises choses arriveront. Je veux demander aux articles de se développer pour s'adapter à l'espace disponible. La Viewbox permet aux contenus d'utiliser n'importe quel espace qu'ils désirent, puis il les agrandit ou les rétrécit de manière à s'adapter à l'espace disponible. Il semble qu'il devrait y avoir une méthode pour référencer la largeur de ItemsPresenter contenue dans le ScrollViewer dans ListView. Cela devrait être la largeur que je cherche ... – oillio

1

Juste une idée, mais que se passerait-il si vous supprimiez tout ce paramétrage wWidth?

Quand j'utilise:

<ListView DockPanel.Dock="Top"> 
     <ListViewItem Background="Orange">aaa</ListViewItem> 
     <ListViewItem>aaa</ListViewItem>    
    </ListView> 

l'élément orange couvre toute la largeur de la ListView ...

+0

Je suis relativement nouveau à WPF, mais dans mon expérience ce n'est pas ce qui se passe. L'élément orange ne couvrira que la largeur requise par son contenu. Dans ce cas, la largeur de 'aaa'. Si le contenu est plus grand que l'espace disponible, ils seront invités à rétrécir. Mais si elles sont plus petites, on ne leur demandera pas de s'étendre (j'aimerais qu'elles s'étendent). Dans mon cas, les éléments de la liste sont définis dans un ItemTemplate, ce qui explique peut-être pourquoi le mien se comporte différemment. – oillio

+0

Je viens de vérifier. Oui, c'est le comportement d'un ListViewItem. Mais je ne les utilise pas, j'utilise un ItemTemplate. Est-il possible de définir le ItemTemplate à se comporter comme un ListViewItem? – oillio