如何在WPF中使控件填充容器?

时间:2014-05-07 07:09:32

标签: c# wpf xaml

以下是我的xaml代码:

<Window x:Class="ScoresBank.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow">
<DockPanel LastChildFill="True">
    <WrapPanel DockPanel.Dock="Top">
        <ToolBar Height="25"></ToolBar>
    </WrapPanel>
    <WrapPanel DockPanel.Dock="Bottom">
        <StatusBar Name="stbBottom" Height="25"
                   BorderThickness="2"
                   BorderBrush="Black">Example</StatusBar>
    </WrapPanel>
    <StackPanel DockPanel.Dock="Left">
        <DockPanel LastChildFill="True">
            <WrapPanel DockPanel.Dock="Top">
                <Button Name="btnBrowseTags">TAGS</Button>
                <Button Name="btnBrowseTitles">TITLES</Button>
            </WrapPanel>
            <ComboBox DockPanel.Dock="Top" Name="cbxCategory">
                Example
            </ComboBox>
            <WrapPanel DockPanel.Dock="Bottom">
                <TextBox Name="txtKeyword"></TextBox>
                <Button Name="btnFind">Find</Button>
            </WrapPanel>
            <ListBox Name="lbxBrowse">
            </ListBox>
        </DockPanel>
    </StackPanel>
    <StackPanel DockPanel.Dock="Right">
        <Button>Example</Button>
    </StackPanel>
    <Canvas>

    </Canvas>
</DockPanel>

这是我当前的布局视图:enter image description here

所以,填充容器的意思是:

  1. lbxBrowse填充左侧DockPanelStackPanel的中间空格。
  2. txtKeyword填充WrapPanel
  3. stbBottom填充WrapPanel
  4. 我尝试了什么:

    1. 我似乎已将它们放在DockPanel LastChildFill="True"。但它似乎不起作用。
    2. 我不知道这个,因为不可能先把它放进DockPanel
    3. 我对此一无所知。
    4. 我不使用固定大小,因为即使在多屏幕分辨率下调整大小,我也需要它们保持整洁。似乎需要ToolBarStatusBar上的固定尺寸,否则,文字将是看不见的。

      P.S。如果可能的话,我更喜欢解决方案是XAML代码,而不是C#代码。否则,C#代码也没问题。

      谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用StackPanel并设置DockPanelGrid,而不是使用Grid.ColumnDefinitionsGrid.RowDefinitions。您可以直接指定每行Height和每列Width。它更易于使用,并且可以自动适应内容和容器。

答案 1 :(得分:2)

您应该使用Grid。它更容易配置。这是一个例子(我不确切地知道你想如何设置你的布局)。

<Window x:Class="SampleWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="600">
    <Grid>
      <Grid.RowDefinitions>
         <RowDefinition Height="Auto" />
         <RowDefinition Height="Auto" />
         <RowDefinition Height="*" />
         <RowDefinition Height="Auto" />
      </Grid.RowDefinitions>

      <Grid.ColumnDefinitions>
         <ColumnDefinition Width="Auto" />
         <ColumnDefinition Width="Auto" />
         <ColumnDefinition Width="*" />
      </Grid.ColumnDefinitions>

      <Button Margin="5" Content="TAGS"
               Grid.Column="0" Grid.Row="0" />
      <Button Margin="5" Content="TITLES"
               Grid.Column="1" Grid.Row="0" />
      <Button Margin="5" Content="EXAMPLES"
              Grid.Column="2" Grid.Row="0" 
              HorizontalAlignment="Right"/>

      <ComboBox Margin="5"
                 Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" />

      <ListBox Margin="5"
                Grid.Column="2" Grid.Row="1" Grid.RowSpan="2" />

      <Button Margin="5" Content="EXAMPLE"
              Grid.Column="2" Grid.Row="3" HorizontalAlignment="Left" />

   </Grid>
</Window>

结果:

enter image description here

使用网格,您可以将列和行的高度和宽度设置为特定值(以磅,像素,厘米等),列内容(Auto)或与网格成比例(使用*)。