Получение элемента управления WPF для растяжения по вертикали - PullRequest
3 голосов
/ 06 марта 2012

Я не могу заставить работать мой макет WPF. Я хочу, чтобы ListBox растягивался по вертикали, привязываясь к нижней части окна. В настоящее время он просто измеряет высоту элементов управления в StackPanel (кнопки «Добавить» и «Удалить») и изменяет размеры для размещения добавляемых элементов. В WinForms я бы просто установил ListView.Anchor на Top|Left|Bottom|Right, но я не должен жить в прошлом. Я пробовал несколько вещей, таких как вставка в DockPanel, упаковка в Canvas и т. Д., Но, похоже, ничего не изменилось.

ViewsTestListView

Вот мой XAML:

<Window x:Class="FileDropAdmin.ViewsTestListView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:shared="http://schemas.markpad.net/winfx/xaml/shared"
        Title="ViewsTestListView" Height="300" Width="416">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <TextBlock TextWrapping="Wrap" VerticalAlignment="Top" Text="Things:" />
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="4*"/>
                <ColumnDefinition Width="1*"/>
            </Grid.ColumnDefinitions>   

            <ListBox x:Name="Things" DisplayMemberPath="ThingName" SelectedItem="CurrentThing" Grid.Column="0"/>
            <StackPanel Margin="5 0 0 0" VerticalAlignment="Top" Grid.Column="1">
                <Button x:Name="AddThing" Content="Add" Margin="0 0 0 0" VerticalAlignment="Top"/>
                <Button x:Name="RemoveThing" Content="Remove" Margin="0 5 0 0" VerticalAlignment="Top"/>
            </StackPanel>
        </Grid>
    </Grid>
</Window>

Ответы [ 3 ]

6 голосов
/ 06 марта 2012

Установите для второго ряда значение Высота = "*", и оно должно занимать все пространство окна, если это то, что вам нужно

0 голосов
/ 06 марта 2012

Вам нужны следующие опции ...

Ваше определение второй строки должно быть Height="*"

    <Grid.RowDefinitions>
         <RowDefinition Height="Auto" />
         <RowDefinition Height="*" />
     </Grid.RowDefinitions> 

, а вашему ListBox нужно ColumnSpan="2"

     <ListBox x:Name="Things"
              DisplayMemberPath="ThingName"
              SelectedItem="CurrentThing"
              Grid.ColumnSpan="2"
              Grid.Column="0"/>

Также вы сказали, что использовали DockPanel ... с док-панелью еще проще.Все, что вам нужно, это установить LastChildFill = "True" и добавить свой ListBox как последний дочерний элемент в панели док-станции.

    <DockPanel LastChildFill="True">
          <Grid DockPanel.Dock="Top" HorizontalAlignment="Stretch">
               <Grid.ColumnDefinitions>
                     <ColumnDefinition Width="4*"/>
                     <ColumnDefinition Width="1*"/>
               </Grid.ColumnDefinitions>
               <StackPanel Margin="5 0 0 0" Grid.Column="0"
                           HorizontalAlignment="Stretch">
                     <TextBlock Text="Things:"/>
                     <TextBox HorizontalAlignment="Stretch"
                              VerticalAlignment="Stretch"/>
               </StackPanel>
               <StackPanel Margin="5 0 0 0" Grid.Column="1">
                    <Button x:Name="AddThing" Content="Add" Margin="0 0 0 0"/>
                    <Button x:Name="RemoveThing" Content="Remove"
                            Margin="0 5 0 0"/>
               </StackPanel>
          </Grid>
          <ListBox x:Name="Things" DisplayMemberPath="ThingName"
                   SelectedItem="CurrentThing" /> 
    </DockPanel> 
0 голосов
/ 06 марта 2012

Добавьте еще одну строку, которая занимает все оставшееся пространство ...

    <Grid.RowDefinitions> 
        <RowDefinition Height="*" /> 
        <RowDefinition Height="Auto" /> 
        <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

... затем настройте значения строк для текстового блока и списка ... ... 1004 *

    <TextBlock Grid.Row="1" TextWrapping="Wrap" VerticalAlignment="Top" Text="Things:" />  
    <Grid Grid.Row="2"> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...