2011-08-11 32 views
1

C#,Vsual工作室2010,點網4,WPF,微軟織帶C#,WPF,Autorezise列表框當窗口調整大小

我與在窗口頂部的色帶menues和下方 的區域中的WPF窗口我試圖用我的控件填充,但我無法得到控制與我的窗口 rezise。

當窗口出現時,以下示例中的列表框應該在其邊界處完全「展開」,並且當用戶通過拖動調整窗口大小(用戶不應調整控件本身的大小)時,寬度應該跟隨窗口寬度我在窗邊。

我嘗試了很多玩控制和搜索網頁,但一直沒能 找到解決辦法。 (有些網站使用邊框會造成詭計)

圖片image1是跨越整個「表面」的背景圖片。 圖片image2是一個小標誌圖片。

<DockPanel DockPanel.Dock="Top"> 
    <Grid DockPanel.Dock="Top" Height="526" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="2" Name="BaseGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="1" /> 
      <RowDefinition Height="60" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Image Grid.Column="0" Grid.Row="0" Grid.RowSpan="3" HorizontalAlignment="Left" Name="image1" VerticalAlignment="Top" Source="........./el_bg.jpg" Stretch="None" /> 
     <Grid Grid.Column="0" Grid.Row="1" VerticalAlignment="Top" Margin="2" HorizontalAlignment="Left"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="200" /> 
       <ColumnDefinition Width="100" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="50" /> 
      </Grid.RowDefinitions> 
      <Image Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" Name="image2" Stretch="Fill" VerticalAlignment="Top" Source="........./shiny_rgb.png" /> 
      <ListBox Grid.Column="2" Grid.Row="0" Name="MessageToUser" VerticalAlignment="Top" /> 
     </Grid> 
    </Grid> 
</DockPanel> 

問候

+0

我不能從你的Xaml中得到你期望的樣子(它在Kaxaml中也不能很好地表現出來)。好像有一個背景圖片,一個圖標(左上角?)和一個列表框,位於圖標的右側 - 然後剩下的空間大概留下來供進一步的內容使用。是對的嗎? –

+0

您是否期待'ListBox'獲取水平軸,垂直軸或兩者上的所有可用空間? – XAMeLi

回答

1

你設置水平定於Left不應該設置。試試這個:

<DockPanel DockPanel.Dock="Top"> 
    <Grid DockPanel.Dock="Top" Height="526" VerticalAlignment="Top" Margin="2" Name="BaseGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="1" /> 
      <RowDefinition Height="60" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Image Grid.Column="0" Grid.Row="0" Grid.RowSpan="3" HorizontalAlignment="Left" Name="image1" VerticalAlignment="Top" Source="........./el_bg.jpg" Stretch="None" /> 
     <Grid Grid.Column="0" Grid.Row="1" VerticalAlignment="Top" Margin="2"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="200" /> 
       <ColumnDefinition Width="100" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="50" /> 
      </Grid.RowDefinitions> 
      <Image Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" Name="image2" Stretch="Fill" VerticalAlignment="Top" Source="........./shiny_rgb.png" /> 
      <ListBox Grid.Column="2" Grid.Row="0" Name="MessageToUser" VerticalAlignment="Top"> 
       <ListBoxItem>One</ListBoxItem> 
       <ListBoxItem>Two</ListBoxItem> 
      </ListBox> 
     </Grid> 
    </Grid> 
</DockPanel> 

另外,你的ListBox在它的包含Grid的第三列。如果你希望它在整個窗口舒展,你將需要確保它跨越所有三列:

<ListBox Grid.ColumnSpan="3" Grid.Row="0" Name="MessageToUser" 
     VerticalAlignment="Top"> 

您應該WPF layout讀了 - 你在這裏設置的方式更多的屬性比你需要的人。一旦你瞭解它,你會發現這件事更直觀。另外,您可以使用像Snoop這樣的工具來幫助弄清楚佈局的問題。

0

應用下面的風格讓我滿足這一要求:

<Style x:Key="listBoxAutoFill" TargetType="ListBoxItem"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
      <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" 
       BorderThickness="{TemplateBinding BorderThickness}" 
       Background="{TemplateBinding Background}" 
       Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> 
       <ContentPresenter HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" 
        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsSelected" Value="true"> 
        <Setter Property="Background" TargetName="Bd" 
        Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
        <Setter Property="Foreground" 
        Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
       </Trigger> 
       <MultiTrigger> 
        <MultiTrigger.Conditions> 
        <Condition Property="IsSelected" Value="true"/> 
        <Condition Property="Selector.IsSelectionActive" Value="false"/> 
        </MultiTrigger.Conditions> 
        <Setter Property="Background" TargetName="Bd" 
        Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
        <Setter Property="Foreground" 
        Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
       </MultiTrigger> 
       <Trigger Property="IsEnabled" Value="false"> 
        <Setter Property="Foreground" 
        Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

我的要求是更多關於變更列表框高度爲窗口的增長/收縮,但同樣可以適用於寬度。

<ListBox Grid.Row="1" Grid.Column="0" Width="158" 
    ItemContainerStyle="{StaticResource listBoxAutoFill}" 
    ItemsSource="{Binding ListBoxItems, Mode=TwoWay}" />