使WPF TextBox只有它所拥有的房间宽,但是当空间扩展时会扩展吗?

时间:2011-05-15 02:09:32

标签: wpf xaml textbox width

注意文本框如何向右扩展,直到它有足够的水平空间来容纳内容?好吧,我希望它不会扩展并使文本适合窗口中的空间。

enter image description here

如果窗口展开,那么它所在的Grid.Column将展开,但文本框本身应该展开以适应。够简单吗?

有什么建议吗?这是我第一次涉足WPF,到目前为止它非常流畅。

编辑:这是我的XAML标记:

<Window x:Class="GameLenseWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="350" MinHeight="450" MinWidth="350">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="0.15*" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Image Grid.Row="0" Stretch="Fill" Source="Image/topBarBg.png" />
        <StackPanel Orientation="Horizontal" Grid.Row="0">
            <TextBlock Text="Platform" 
                       Foreground="White" 
                       FontFamily="Georgia"
                       FontSize="15" 
                       Margin="10"
                       HorizontalAlignment="Center"
                       VerticalAlignment="Center"/>
            <ComboBox x:Name="cmbPlatform" 
                      Margin="10"
                      FontFamily="Georgia"
                      FontSize="15"
                      MinHeight="30"
                      MinWidth="140"
                      VerticalAlignment="Center"
                      VerticalContentAlignment="Center" SelectionChanged="cmbPlatform_SelectionChanged">
                <ComboBoxItem>All Platforms</ComboBoxItem>
                <ComboBoxItem>Playstation 3</ComboBoxItem>
                <ComboBoxItem>XBox 360</ComboBoxItem>
                <ComboBoxItem>Wii</ComboBoxItem>
                <ComboBoxItem>PSP</ComboBoxItem>
                <ComboBoxItem>DS</ComboBoxItem>
            </ComboBox>
        </StackPanel>
        <Image x:Name="imgAbout" Grid.Row="0" Source="Image/about.png" 
               Height="16" HorizontalAlignment="Right"
               VerticalAlignment="Center"
               Margin="0 0 10 0"    />
        <ListBox Grid.Row="1" x:Name="lstGames" Background="#343434" Padding="5">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Height="120" Margin="0 10">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="90"/>
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                        </Grid.RowDefinitions>

                        <Border BorderBrush="#202020" BorderThickness="5" CornerRadius="4" Panel.ZIndex="0">
                            <Image Grid.Row="0" Grid.Column="0" Source="{Binding ImageUrl}" Stretch="Fill"/>                            
                        </Border>

                        <StackPanel Grid.Row="0" Grid.Column="1" Margin="12 0 0 0">
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="Title:" FontFamily="Arial" Foreground="White"/>
                                <TextBlock Text="{Binding Title}" FontFamily="Arial" Foreground="White" />
                            </StackPanel>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="Release Date:" FontFamily="Arial" Foreground="White" />
                                <TextBlock Text="{Binding ReleaseDate}" FontFamily="Arial" Foreground="White" />
                            </StackPanel>
                            <TextBlock Text="Synopsis" FontFamily="Arial" Foreground="White" />
                            <TextBox Background="#454545" Text="{Binding Synopsis}" MinHeight="76" />
                        </StackPanel>  
                    </Grid>                    
                </DataTemplate>
            </ListBox.ItemTemplate>            
        </ListBox>
    </Grid>
</Window>

2 个答案:

答案 0 :(得分:7)

要使TextBox包装在ListBox中,您可以进行以下更改:

  1. 使用以下命令设置列表框的内容等于列表框的宽度:Horizo​​ntalContentAlignment =“Stretch”。
  2. 禁用列表框的水平滚动条,以防止列表框获得所需的控件大小并阻止文本框中的自动换行。
  3. 在TextBox
  4. 中设置TextWrapping =“Wrap”

    这是XAML:

    <ListBox Grid.Row="1" x:Name="lstGames" Background="#343434" Padding="5" 
             ScrollViewer.HorizontalScrollBarVisibility="Disabled"
             HorizontalContentAlignment="Stretch" >
    </ListBox>
    
    <TextBox Text="{Binding Synopsis}" MinHeight="76" TextWrapping="Wrap" />
    

答案 1 :(得分:1)

我相信你需要设置文本框控件的Margin属性。在设计器中,您可以看到每个文本框周围的小圆圈(以及每个控件在您关注它们时)。单击文本框右侧的小圆圈,使该控件随着当前布局控件中的可用空间略微增长(通过单击圆圈,边距将添加到XAML中)。

我不知道您的图片中是否已经调整了窗口大小,但是如果显示该图像,则还需要设置文本框的宽度。

这有帮助吗?