Сделать так, чтобы текстовый блок WPF был таким же широким, как и комната, но расширялся, когда пространство расширялось? - PullRequest
2 голосов
/ 15 мая 2011

Заметьте, как текстовое поле расширяется вправо, пока не будет достаточно горизонтального пространства для размещения содержимого? Что ж, я бы хотел, чтобы текст не расширялся и не умещался в соответствии с местом в окне.

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 ]

7 голосов
/ 15 мая 2011

Чтобы получить TextBox для переноса внутри ListBox, вы можете внести следующие изменения:

  1. Установите содержимое списка равным ширине списка, используя: HorizontalContentAlignment = "Stretch".
  2. Отключите горизонтальную полосу прокрутки списка, чтобы запретить списку получать нужный размер элементов управления и предотвратить перенос слов в текстовом поле.
  3. Set TextWrapping = "Wrap" в TextBox

Вот 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 голос
/ 15 мая 2011

Полагаю, вам нужно установить свойство Margin вашего текстового элемента управления. В конструкторе вы можете видеть маленькие кружочки вокруг каждого текстового поля (и каждого элемента управления, когда вы их фокусируете). Щелкните по маленькому кружку с правой стороны текстового поля, чтобы этот элемент управления незначительно увеличился с доступным пространством в текущем элементе управления макетом (при щелчке по кружку поле будет добавлено в XAML).

Я не знаю, если в своем изображении вы уже отрегулировали размер окна, но с этим изображением вам также нужно будет установить ширину для текстового поля.

Помогает ли это?

...