2010-01-27 3 views
1

Mon contrôle utilisateur dispose de deux sous-contrôles, une liste et un détail.WPF: Mise en page Question

  • Lorsque rien n'est sélectionné dans la liste, je veux la liste pour remplir tout le contrôle
  • Quand quelque chose est sélectionné, je veux la liste pour remplir la moitié supérieure et le détail contrôlent la moitié inférieure.

La modification dynamique de la visibilité sur le contrôle de détail est facile. Ce sur quoi je suis bloqué, c'est comment redimensionner la liste.

Répondre

1

Stanislav m'a donné une idée. Utilisez une grille de deux lignes, mais ne définissez pas la hauteur. Au lieu de cela, avoir le contrôle supérieur RowSpan à travers les deux moitiés de l'écran.

contrôle supérieur:

Grid.RowSpan="{p:PyBinding 1 if ($[MainList.SelectedIndex] > -1) else 2}" 

contrôle inférieur:

Visibility="{p:PyBinding BooleanToVisibility($[MainList.SelectedIndex] > -1)}" 
0

Ne pouvez-vous pas simplement mettre la liste dans un <Border> ou un <Grid> ou quelque chose et juste redimensionner cela? Ou si vous voulez des barres de défilement, vous pouvez le mettre à l'intérieur d'un <ScrollViewer>.

+0

Comment écririez-vous la logique de resizeing? –

1

Comment changer la visibilité? Si vous mettez votre grille dans une sous-contrôles avec les RowDefinitions suivantes:

<Grid.RowDefinitions> 
    <RowDefinition/> 
    <RowDefinition Height="Auto"/> 
</Grid.RowDefinitions> 

avec la liste dans la première ligne et le contrôle de détail dans la seconde, puis la mise en Visibility = Collapsed du contrôle de détail devrait redimensionner automatiquement la liste.

+0

Comment le contrôle inférieur censé savoir la taille à se faire si vous faites cela? –

+0

J'ai supposé la hauteur fixe dans ma réponse. Avez-vous besoin d'être exactement la moitié de la taille du contrôle contenant? Vous pouvez lier à la propriété ActualHeight de la grille avec un convertisseur qui réduit de moitié la valeur qui lui est transmise. S'il vous plaît poster un croquis de ce que vous essayez de faire - il serait plus facile de le modifier que de deviner. –

+0

Je n'étais pas au courant d'une propriété ActualHeight. Cela pourrait fonctionner. –