2011-09-26 3 views
1

La configuration:Redimensionnement colonnes GridView après le rendre visible

ListView avec GridView qui est d'abord caché lorsque la fenêtre est chargée, puis rendu visible sur une certaine action de l'utilisateur.

Le but:

pouvoir régler la largeur relative des colonnes de GridView.

Le problème:

Ce que je dois peut être réalisé soit en utilisant un convertisseur sur la largeur (quelque chose de similaire à la réponse here), ou en ajoutant un comportement sur le ListView (voir this solution). Les deux approches semblent être valides - mais seulement pour les contrôles rendus depuis le début. Dans mon cas, la valeur ActualWidth est toujours 0 lorsque les calculs sont effectués et ces calculs ne sont pas répétés lorsque ListView est rendu visible.

Donc, je suppose, le réel question ici est comment obtenir les colonnes de largeur pour être réévalué lors ActualWidth de ListView obtient supérieure à 0.

La solution serait de préférence au XAML niveau, sans impliquer le code-behind - mais cela fera aussi, si c'est la seule alternative ;-)

Des suggestions?

P.S. En suivant la question de Chris ci-dessous, voici une clarification sur la façon dont le ListView est caché/montré: c'est un enfant d'un autre conteneur, hébergé dans une colonne Grid, et la largeur de cette colonne est manipulée par un trigger.

<ColumnDefinition> 
    <ColumnDefinition.Style> 
     <Style> 
      <Setter Property="ColumnDefinition.Width" Value="4*"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=OpenItems.Count}" Value="0"> 
        <Setter Property="ColumnDefinition.Width" Value="0"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ColumnDefinition.Style> 
</ColumnDefinition> 

J'ai essayé d'appliquer un déclencheur semblable à lui-même le conteneur du ListView (pour manipuler sa visibilité entre Collapsed et visible) à la place, mais le problème avec cela est que la colonne ne rétrécit pas de son 4 original * largeur , donc je vois le contrôle (vide) quand il est censé être caché.

Répondre

0

Comment cachez-vous/affichez le ListView? La question semble impliquer que vous le faites en définissant la propriété Width à 0 (ou différent de zéro pour l'afficher). Au lieu de cela, vous devez essayer d'utiliser la propriété Visibility (définie sur "Réduit" pour masquer ou "Visible" pour afficher). Cela devrait réévaluer la largeur de la colonne.

MISE À JOUR:

Sur la base de votre question mise à jour, je vous suggère de vérifier cette solution: http://www.codeproject.com/KB/grid/ListView_layout_manager.aspx

Je l'ai obtenu d'ici FWIW: WPF : Extend last column of ListView's GridView

+0

Chris, je mis à jour la question initiale plus détails. Espérons que cela éclaircirait la situation ... – Alex

Questions connexes