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

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
Only Bolivian Here 15 Май 2011 в 06:09
1
Невозможно ответить, не видя свой XAML ... По умолчанию TextBox занимает все доступное пространство, но не больше (HorizontalAlignment = Stretch). Как вы определили ItemTemplate и ItemContainerStyle в своем ListBox?
 – 
Thomas Levesque
15 Май 2011 в 06:17

2 ответа

Лучший ответ

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

  1. Установите содержимое списка равным ширине списка, используя: HorizontalContentAlignment = "Stretch".
  2. Отключите горизонтальную полосу прокрутки списка, чтобы предотвратить получение списком желаемых размеров элементов управления и предотвращение переноса слов в текстовом поле.
  3. Установите 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" />
7
Zamboni 15 Май 2011 в 20:09
Спасибо! Настройка ContentAlignment для ListBox сработала.
 – 
Only Bolivian Here
15 Май 2011 в 21:26

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

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

Это помогает?

1
Fishz 15 Май 2011 в 06:20
Нет, установка свойства margin (right) на что-то не помогла. Он по-прежнему расширяется вправо.
 – 
Only Bolivian Here
15 Май 2011 в 06:25
Хорошо, извините, я неправильно прочитал ваш первоначальный пост. Вам необходимо установить свойство TextWrapping для текстового поля.
 – 
Fishz
15 Май 2011 в 06:37
Серджио, это решило вашу проблему? Я тестировал его с набором Margin (в моем исходном ответе) и со свойством TextWrapping, установленным на Wrap. Результатом была описанная вами функциональность, при которой текст переносился на новую строку в зависимости от размера родительского элемента управления макетом.
 – 
Fishz
15 Май 2011 в 09:48
К сожалению, это не решило мою проблему. :( Не могли бы вы опубликовать свой xaml, чтобы я мог сравнить его с моим и посмотреть, что я делаю по-другому. Я тоже не понимаю, что установка поля и переноса текста не решит эту проблему, но на моей машине это не так ' т.
 – 
Only Bolivian Here
15 Май 2011 в 19:09
В других ситуациях то, что описал Фишз, сработало для меня (в частности, TextWrapping="Wrap" - но я попробовал это с вашим точным кодом, и это не сработало, как я ожидал. Я пытаюсь увидеть то, что вижу сейчас.
 – 
Tim
15 Май 2011 в 19:59