2010-10-24 22 views
4

Thats my le code jusqu'à présent qui ne fonctionne pas:WPF: Aligner derniers deux commandes dans StackPanel/DockPanel sur le côté droit même

<DockPanel >   
      <Button Content="Start" Command="{Binding Path=FirstDateCommand}" /> 
      <Button Content="Back" Command="{Binding Path=PreviousDateCommand}" />   
      <DatePicker Width="150" 
       SelectedDate="{Binding Path=SelectedDate}" 
       DisplayDateStart="{Binding Path=MinDate}" 
       DisplayDateEnd="{Binding Path=MaxDate}" SelectedDateFormat="Long" /> 
      <Button Content="Forward" Command="{Binding Path=NextDateCommand}" /> 
      <Button Content="End"  Command="{Binding Path=LastDateCommand}" /> 

      <Button Command="{Binding PrintCommand}" Content="Print Planner" /> 
      <Button Command="{Binding ToggleDocumentsCommand}" Content="Show Docs" /> 
      <Button Command="{Binding MaterialExplorerShowCommand}" Content="Browse Docs" /> 
      <Button Command="{Binding LessonPlannerCommand}" Content="Edit Planner" /> 
      <TextBox Text="{Binding SearchText,Mode=TwoWay}" Width="50" />   
      <Button Command="{Binding FindAllCommand}" Content="Search" /> 

      <DockPanel DockPanel.Dock="Right" HorizontalAlignment="Right"> 
       <TextBlock Text="class code:" VerticalAlignment="Center" /> 
       <ComboBox 
       ItemsSource="{Binding GroupViewModelList}" 
       Style="{StaticResource GroupViewModelStyle}" 
       ItemTemplate="{StaticResource GroupViewModelItemTemplate}" 
       Width="100"/> 
      </DockPanel> 

     </DockPanel> 

alt text

Comment puis-je régler les 2 derniers contrôles sur la image sur le très bon côté?

MISE À JOUR:

<Grid Name="MainGrid"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="40" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Grid Margin="10,10,10,0" Grid.Row="0" Name="ButtonBar"> 
      <StackPanel FocusManager.IsFocusScope="True" Orientation="Horizontal">    
       <ComboBox 
         AlternationCount="2" 
         FontSize="16" 
         VerticalContentAlignment="Center" 
         Width="100" 
         ItemContainerStyle="{StaticResource alternateColor}" 
         ItemsSource="{Binding Source={x:Static Member=Fonts.SystemFontFamilies}}" x:Name="fontComboFast"> 
        <ComboBox.ItemsPanel> 
         <ItemsPanelTemplate> 
          <VirtualizingStackPanel VirtualizingStackPanel.VirtualizationMode="Recycling" /> 
         </ItemsPanelTemplate> 
        </ComboBox.ItemsPanel>      
        <ComboBox.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Width="100" Text="{Binding}" FontFamily="{Binding }" /> 
         </DataTemplate> 
        </ComboBox.ItemTemplate> 
       </ComboBox> 

       <!--<View:FormatButtonBar />--> 
       <View:DateNavigatorView /> 
       <View:LessonPlannerView /> 
       <!--<View:TextFormatBarUC />--> 
      </StackPanel> 
     </Grid> 

Les 2 contrôles sont dans le LessonPlannerView (UserControl)

A l'intérieur du LessonPlannerView vous trouvez ce code:

... 
    <Grid > 
     <DockPanel>    
      <Button Command="{Binding PrintCommand}" Content="Print Planner" /> 
      <Button Command="{Binding ToggleDocumentsCommand}" Content="Show Docs" /> 
      <Button Command="{Binding MaterialExplorerShowCommand}" Content="Browse Docs" /> 
      <Button Command="{Binding LessonPlannerCommand}" Content="Edit Planner" /> 
      <TextBox Text="{Binding SearchText,Mode=TwoWay}" Width="50" />   
      <Button Command="{Binding FindAllCommand}" Content="Search" />    
      <StackPanel x:Name="ClassCodeChooser" Orientation="Horizontal" DockPanel.Dock="Right" HorizontalAlignment="Right"> 
       <TextBlock Text="class code:" VerticalAlignment="Center" /> 
       <ComboBox ItemsSource="{Binding SchoolclassCodeList}"     
       /> 
     </StackPanel>    
     </DockPanel> 
    </Grid> 
</UserControl> 

Répondre

2

Cela devrait être bien, mais vous n'a vraiment pas besoin de DockPanel imbriqué. Vous pouvez remplacer le DockPanel interne par un StackPanel horizontal.

Mais le vrai problème est que votre DockPanel externe ne semble pas s'étendre sur toute la largeur de son conteneur. Définir un arrière-plan sur le DockPanel externe pour vous donner une indication visuelle de la raison pour laquelle il ne remplit pas son conteneur.

En réponse au fil de commentaire ci-dessous, en ajoutant l'exemple suivant

<Grid Name="ButtonBar"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="40" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <DockPanel Grid.Row="0"> 
     <View:FormatButtonBar /> <!-- this will dock left --> 
     <View:DateNavigatorView /> <!-- this will dock left --> 
     <View:LessonPlannerView /> <!-- this will dock left --> 
     <View:TextFormatBarUC /> <!-- this will fill --> 
    </DockPanel> 

</Grid> 
+0

oui la DockPanel extérieure n'est pas étirer toute la largeur et je ne sais pas pourquoi. L'ensemble ButtonBar est dans un UserControl pour le rendre réutilisable et je l'utilise 2 fois. – Elisabeth

+0

J'ai défini HorizontalAlignment = "Stretch" sur le dockpanel, la grille parente, la commande parente parent etc ... son étirement juste quand j'ai fixé une largeur fixe? – Elisabeth

+0

Pouvez-vous montrer l'arbre entier jusqu'à la racine de la fenêtre ou UserControl? L'HorizontalAlignment par défaut est Stretch, vous n'avez donc pas besoin de le définir explicitement. – Josh