2009-06-23 8 views
12

In einem 630 x 400 Fenstern, ich lade es XAML Elemente:Wie bekomme ich ein UserControl zum dehnen, um den zugewiesenen Platz zu füllen?

  • Menü oben
  • dynamische Benutzersteuerung
  • Fußzeile am unteren

Das Problem ist, dass, wenn Ich stelle den Hintergrund des UserControls ein, die Farbe geht nur bis zum Inhalt runter. Ich möchte, dass der Hintergrund des UserControls das gesamte UserControl natürlich abdeckt. Ich habe versucht:

  • Vertical = "Stretch" in dem Usercontrol
  • Vertical = "Stretch" in dem Usercontrol
  • Vertical = "Stretch" in der Hauptansicht
  • V erticalAlignment = "Stretch" in dem Mainview

Aber die Farbe immer noch weigert zu gehen. Ich möchte keine feste Breite festlegen, da der Benutzer die Größe der Anwendung erhöhen kann.

Wie bekomme ich die Hintergrundfarbe meines UserControls, um den gesamten Bereich des UserControl statt nur des Inhaltsbereiches zu füllen?

PageItemOptionsView.xaml:

<UserControl x:Class="TestMenu234.Views.PageItemOptionsView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      VerticalContentAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      Background="#ddd"> 
    <StackPanel Margin="10"> 
     <TextBlock Text="This is the options area."/> 
     <Button Content="Click to go to the Manage Customers page." 
        Width="200"/> 
    </StackPanel> 
</UserControl> 

MainView.xaml:

<Window x:Class="TestMenu234.Views.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c="clr-namespace:TestMenu234.Commands" 
    xmlns:vm="clr-namespace:TestMenu234.ViewModels" 
    xmlns:v="clr-namespace:TestMenu234.Views" 
    Title="Main Window" Height="400" Width="630" MinWidth="630"> 

...

<DockPanel LastChildFill="False"> 

     <Menu DockPanel.Dock="Top"> 
      <MenuItem 
       Header="Pages" ItemsSource="{Binding AllPageItemViewModels}" 
         ItemTemplate="{StaticResource CodeGenerationMenuTemplate}"/> 
     </Menu> 

     <ContentControl 
      DockPanel.Dock="Top" 
      VerticalAlignment="Stretch" 
      VerticalContentAlignment="Stretch" 
      Content="{Binding CurrentPageItemViewModel}"/> 

     <Border DockPanel.Dock="Bottom" Padding="5 5 5 0" Background="#eee"> 
      <Grid Background="#eee"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*" MinWidth="300"/> 
        <ColumnDefinition Width="200"/> 
        <ColumnDefinition Width="100"/> 
       </Grid.ColumnDefinitions> 
       <Slider 
       Grid.Column="0" 
       HorizontalAlignment="Left" 
       Value="{Binding CurrentPageItemViewModelIndex}" 
       Width="300" 
       Minimum="0" 
       Maximum="{Binding HighestPageItemIndex}"/> 

       <TextBlock Grid.Column="1" 
          HorizontalAlignment="Center" FontWeight="Bold" 
          Text="{Binding CurrentPageItemViewModelTitle}"/> 

       <DockPanel Grid.Column="2" Margin="0 0 0 5" LastChildFill="False"> 
        <Button 
        Margin="3 0 0 0" 
        DockPanel.Dock="Right" 
       HorizontalAlignment="Right" 
       Content="Next" Command="{Binding NextPageCommand}"/> 
        <Button 
        DockPanel.Dock="Right" 
       Content="Prev" Command="{Binding PreviousPageCommand}"/> 
       </DockPanel> 
      </Grid> 
     </Border> 

    </DockPanel> 
</Window> 

Antwort

12

Haben Sie versucht ...

  1. Rahmen Margin = "0"
  2. Erstellen der Steuer das letzte Kind von DockPanel mit LastChildFill = "True"
+2

Ok, das war sehr schön. Ich habe deinen Vorschlag nicht einmal versucht, weil ich dachte "aber ich möchte nicht, dass meine Inhaltskontrolle das letzte Kind ist, sondern das vorletzte Kind". Ich habe es trotzdem versucht und es funktioniert. Der Grund dafür ist, dass das "letzte Kind" eines DockPanels nicht das Kind "am weitesten unten" sondern das Kind "zuletzt in der XAML" ist. Sehr gut zu wissen. –

+0

Wenn ich das mache, füllt das Steuerelement ja, aber überlappt meine Statusleiste –

Verwandte Themen