2011-09-05 39 views
1

下面是一個相當常見的UI模式:包含左側路徑和右側的瀏覽按鈕的文本框。如果窗口調整大小,按鈕將保持在右側,但文本框會伸展以顯示更多/更少的路徑。因此,在錨的美好時代,按鈕將固定在右側,而文本框將固定在左側和右側。在可伸縮WPF窗口的一條線上佈局兩個控件

試圖在WPF中複製這個似乎是令人擔憂的困難。

如果我創建了一個新窗口,默認情況下它帶有一個網格佈局。我把我的文本框放在左邊,並適當調整大小,然後將按鈕放在右邊。文本框的Horizo​​ntalAlignment是Stretch,按鈕是Right。

在我看來,它的工作原理與實際情況相同,但在現實生活中,文本框根本沒有調整大小,而是試圖將自己置於窗口中,而按鈕按預期行事。是什麼賦予了?

這是我的XAML:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="241" d:DesignWidth="414" SizeToContent="WidthAndHeight"> 
    <Grid> 
     <TextBox Height="23" HorizontalAlignment="Stretch" Name="textBox1" VerticalAlignment="Top" Margin="12,11,101,0" /> 
     <Button Content="Button" Height="23" HorizontalAlignment="Right" Margin="0,11,12,0" Name="button1" VerticalAlignment="Top" Width="75" /> 
    </Grid> 
</Window> 

回答

3

您將創建另一個GridControl有兩列,一列爲固定寬度的Browse按鈕,另一列爲TextBox

<Grid>    
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition Width="75" /> 
    </Grid.ColumnDefinitions> 
    <TextBox Grid.Column="0" /> 
    <Button Grid.Column="1" /> 
</Grid> 
3

您可以使用DockPanel並設置LastChildFill屬性true以確保文本框使用所有可用空間:

<DockPanel LastChildFill="true"> 
    <Button DockPanel.Dock="Right">Browse</Button> 
    <TextBox>Content</TextBox> 
</DockPanel>