Как получить ширину / высоту свернутого элемента управления в WPF? - PullRequest
6 голосов
/ 18 апреля 2011

Мне интересно, есть ли простой способ получить ширину элемента управления в WPF во время выполнения, когда элемент управления свернут.

когда я использую control.Width, я получу следующий результат: -1. # IND и control.actualWidth вернет 0.0, потому что его свернули.

Я хочу изменить размер окна, а затем отобразить свернутый элемент управления.

спасибо

Edit:
Некоторые детали

У меня есть сетка с 2 столбцами в моем окне, 1-й столбец содержит элемент управления вкладкой, 2-й столбец содержит элемент управления расширителя. я хочу увеличить ширину моего окна при расширении элемента управления экспандера, чтобы содержимое в первом столбце оставалось в своем размере.

Ответы [ 6 ]

1 голос
/ 18 апреля 2011

Поместите соответствующий элемент управления в контейнер (например, ContentControl) и сверните контейнер, а не сам элемент управления. Тогда вы сможете просто вызвать Measure (или использовать свойство DesiredSize) на элементе управления, чтобы определить, сколько места ему нужно.

0 голосов
/ 06 мая 2018

Сообщение, помеченное как ответ, фактически не отвечает на вопрос, оно просто дает обходной путь.

Чтобы получить размер свернутого элемента управления, вам необходимо:

  1. Установитьвидимость элемента управления как скрытый (Collapsed не будет оцениваться).
  2. Call Measure (новый метод Size (Double.PositiveInfinity, Double.PositiveInfinity)) элемента управления.
  3. Получить размер из свойства DesiredSizeконтроля.
  4. Тогда вы можете Свернуть свой контроль обратно.
0 голосов
/ 08 сентября 2017

В UWP вы можете определить размер свернутого элемента управления, сделав его видимым на секунду, а затем скрыв его снова, изменения не заметны:

var oldVisibility = myBorder.Visibility;
myBorder.Visibility = Visibility.Visible;
myBorder.UpdateLayout();
var height = myBorder.RenderSize.Height;
myBorder.Visibility = oldVisibility;
0 голосов
/ 08 мая 2016

Вы должны вызвать метод UpdateLayout для элемента управления или элемента управления.После этого все может работать нормально.

0 голосов
/ 18 апреля 2011

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

Проблема возникает всякий раз, когда вы прямо устанавливаете свойство Width любого элемента управления (поверьте мне, я это сделал). Как только вы это сделаете, вы сказали WPF от руки изменить размер логики, я знаю, что я делаю.

Если вы считаете, что что-то не изменяется в нужный момент, вы можете добавить обработчик к какому-либо событию, а затем вызвать control.InvalidateVisual() или control.InvalidateMeasurement(), что заставит его работать через новый проход макета.

0 голосов
/ 18 апреля 2011

Какой размер вы ожидаете получить?

Размер зависит не только от элемента управления, но и от его контейнера. Таким образом, фактический размер не может быть определен, если элемент управления фактически не отображается.

Вместо использования Collapsed вы можете сделать его невидимым таким образом, чтобы он измерялся собственной логикой и логикой контейнера.

EDIT

В комментариях выяснилось, что причина необходимости размера элемента управления:

У меня есть сетка с 2 столбцами в моем окно, 1-й столбец содержит вкладку контроль, 2-й столбец а содержит управление экспандером я хочу продлить ширина моего окна при расширении Расширение управления, поэтому содержание в 1-й столбец останется в своем размере.

Мой ответ:

Установите для параметра SizeToContent окна значение WidthAndHeight и установите для ширины обоих столбцов сетки значение auto. Это должно позаботиться об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...