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

Как использовать строки и столбцы сетки со сворачиваемыми элементами?

У меня есть сетка с несколькими элементами внутри, не все из них видны: некоторые свернуты. Есть ли в WPF простой способ изменить размер уже видимых элементов в сетке при появлении нового элемента?

На самом деле мои потребности проще: у меня есть только 2 предмета, которые нужно сложить вертикально. Большую часть времени будет виден только один, но когда появится второй, мне нужно изменить размер первого до 2/3 размера сетки, а второй разместить ниже, заполнив оставшееся место: 1/3.

введите здесь описание изображения

Я чувствую, что мне нужно поиграть со свойствами Grid.Row (и, возможно, со свойствами Grid.RowSpan), но я не знаю, как добиться желаемого поведения, не испортив его в коде программной части.

То, что я пробовал, безуспешно смешивает автоматический размер со свойством LastChildFill DockPanel.

30.06.2013

Ответы:


1

Вы можете попробовать что-то вроде:

<Grid Background="Green">
  <Grid.RowDefinitions>
    <RowDefinition Height="*" />
    <RowDefinition>
      <RowDefinition.Style>
        <Style TargetType="{x:Type RowDefinition}">
          <Setter Property="Height"
                  Value="0.25*" />
          <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=secondRect,
                                            Path=Visibility}"
                          Value="Collapsed">
              <Setter Property="Height"
                      Value="0" />
            </DataTrigger>
          </Style.Triggers>
        </Style>
      </RowDefinition.Style>
    </RowDefinition>
  </Grid.RowDefinitions>
  <!--  Row 1  -->
  <Rectangle Grid.Row="0"
              Fill="Blue" />
  <!--  Row 2  -->
  <Rectangle x:Name="secondRect"
              Grid.Row="1"
              Fill="Tomato" />
</Grid>

Таким образом, вы устанавливаете Style.Trigger во второй строке сетки, чтобы проверить, является ли элемент, который он содержит, Collapsed, и если да, установите его высоту на «0», а если нет, то на «0,25*», в то время как Grid строка 1 имеет Height как * или " все оставшееся пространство», что связано с этим штрафом.

Альтернативный:

Вы могли бы сделать это и с Grid.RowSpan, как вы упомянули.

<Grid Background="Green">
  <Grid.RowDefinitions>
    <RowDefinition Height="0.75*" />
    <RowDefinition Height="0.25*" />
  </Grid.RowDefinitions>
  <!--  Row 1  -->
  <Rectangle Grid.Row="0"
              Fill="Blue">
    <Rectangle.Style>
      <Style TargetType="{x:Type Rectangle}">
        <Setter Property="Grid.RowSpan"
                Value="1" />
        <Style.Triggers>
          <DataTrigger Binding="{Binding ElementName=secondRect,
                                          Path=Visibility}"
                        Value="Collapsed">
            <Setter Property="Grid.RowSpan"
                    Value="2" />
          </DataTrigger>
        </Style.Triggers>
      </Style>
    </Rectangle.Style>
  </Rectangle>
  <!--  Row 2  -->
  <Rectangle x:Name="secondRect"
              Grid.Row="1"
              Fill="Tomato"
              Visibility="Collapsed" />
</Grid>

Теперь вы получили Trigger в «элементе» 1-й строки, чем Grid.RowDefinition, и когда вы обнаружите, что элемент второй строки становится Collapsed, вы переключаете первый RowSpan на 2, иначе он остается на 1.

30.06.2013
  • Вы открыли для меня новое поле: изменять стили и свойства прямо в XAML. Спасибо большое. 01.07.2013
  • Новые материалы

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

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

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

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

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

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

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