2010-10-17 4 views
0

J'ai lié en haut la largeur de UserControl à la largeur du ButtonGrid en haut.Mon UserControl WPF ne doit jamais être plus large que le ButtonBar contenant

Cela ne fonctionne pas. Je veux que mon UserControl soit toujours aussi large que la largeur du ButtonGrid. Le problème est le chargement de documents avec un nom long> Sum (Largeur de 3 boutons) rend le UserControl aussi large que le nom du document. Maintenant, imaginez avoir des noms de documents avec 100 caractères ou plus et vous ajoutez des documents le UserContol croiserez et saut ...

<UserControl x:Class="TBM.View.DocumentListView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:Behaviours="clr-namespace:FunctionalFun.UI.Behaviours" 
      xmlns:Helper="clr-namespace:TBM.Helper"    
      mc:Ignorable="d"   
      d:DesignHeight="300" 
      d:DesignWidth="300" 
      Width="{Binding ElementName=ButtonGrid,Path=Width}" 
      > 
    <UserControl.Resources> 
     <Helper:BooleanToVisibilityConverter x:Key="boolToVisibilityConverter" /> 
    </UserControl.Resources> 

    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 
     <ListBox 
      SelectionMode="Extended" 
      VirtualizingStackPanel.IsVirtualizing="True" 
      VirtualizingStackPanel.VirtualizationMode="Recycling" 
      Behaviours:MultiSelectorBehaviours.SynchronizedSelectedItems="{Binding SelectedDocumentViewModelList,Mode=TwoWay}"                     
      Width="Auto" 
      Focusable="True" 
      ScrollViewer.HorizontalScrollBarVisibility="Auto" 
      ScrollViewer.VerticalScrollBarVisibility="Auto" 
      Grid.Row="0" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      Name="documentListBox" 
      BorderThickness="1"             
      ItemsSource="{Binding DocumentList}" 
      Visibility="{Binding ElementName=documentListBox,Path=HasItems, Converter={StaticResource boolToVisibilityConverter}}" 
      > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <!--<TextBlock Text="{Binding Path=Id}" />--> 
         <TextBlock Text="{Binding Path=DocumentName}" /> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate>    
     </ListBox> 
     <UniformGrid x:Name="ButtonGrid"   
      Grid.Row="1" 
      Rows="1"           
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Bottom" 
      > 
      <Button Command="{Binding Path=DeleteDocumentCommand}" HorizontalAlignment="Stretch" Content="Delete" /> 
      <Button Command="{Binding Path=AddDocumentCommand}" HorizontalAlignment="Stretch" Content="Add" /> 
      <Button Command="{Binding Path=OpenDocumentCommand}" HorizontalAlignment="Stretch" Content="Open" />   
     </UniformGrid> 
    </Grid> 
</UserControl> 

Répondre

1

Essayez 2 choses

  1. Utiliser l'alignement horizontal sur le contrôle de l'utilisateur pour étirer
  2. Définir la liaison à MaxWidth même que la liaison Width
+0

Je ne comprends pas votre réponse. Définissez l'alignement horizontal sur WHAT. Définir MaxHeight ?? Pourquoi la taille? Je parle de WIDTH – Elisabeth

+0

Ok Liaison à la ListBox de la même manière que j'ai fait à l'UserControl fonctionne quand j'ajoute un document à la liste MAIS quand je navigue en avant/arrière dans mon DataGrid Calendar, le Document ListBox a encore la largeur de ListboxItem plus long:/ – Elisabeth

+0

Je n'ai pas compris le dernier commentaire, peux-tu m'expliquer? –

1

Vous pouvez également définir la largeur du ParentGrid (contenant le contrôle) sur une taille fixe, puis sur l'alignement horizontal. nt to Stretch

+0

Le contrôle qui contient le UserControl est un DataGrid ou le DataGridTemplateColumn pour être précisément. Je ne veux pas définir de taille fixe car/ET peut-être que d'autres boutons seront ajoutés à l'avenir aux 3 boutons existants. Ensuite, la largeur doit être la somme (largeur de 4 boutons) – Elisabeth

+0

Dans ce cas, le DataGrid, lorsque vous ajoutez un bouton, changez simplement la taille du DataGrid. Mais je suis assez nouveau pour WPF, donc il y a probablement de meilleurs moyens;) –

+0

lol ... il y a probablement de meilleurs moyens! ;-) au moment où je mets le UserControl à exactement 125 pixels et cela fonctionne pour 3 boutons. Mais pas pour d'autres boutons, alors je dois changer 125 à ... etc ... pas maintenable ;-) – Elisabeth

Questions connexes