Nano Hash - криптовалюты, майнинг, программирование

Получение элемента управления WPF для вертикального растяжения

Я не могу заставить мой макет 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>
06.03.2012

Ответы:


1

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

06.03.2012

2

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

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

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

    <TextBlock Grid.Row="1" TextWrapping="Wrap" VerticalAlignment="Top" Text="Things:" />  
    <Grid Grid.Row="2"> 
06.03.2012
  • Кажется, это эффективно прикрепляет его к нижней части, что не совсем то, что я хотел, но спасибо 06.03.2012

  • 3

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

    Определение второй строки должно быть 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> 
    
    06.03.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..