Как получить фактическую ширину и фактическую высоту для элемента управления на платформе WPF - PullRequest
0 голосов
/ 29 мая 2020

Я готовлю настраиваемый элемент управления на платформе WPF, в котором я использую презентатор контента для отображения представления и пытаюсь отобразить текст поверх контента презентатора контента с помощью элемента управления текстовым блоком. Для данного текста в текстовом блоке я попытался вычислить фактическую ширину и фактическую высоту для текстового блока, используя метод измерения для позиционирования элемента управления текстовым блоком, но он не предоставляет фактическую ширину и высоту для элемента управления текстовым блоком. . Чтобы элемент управления текстовым блоком не отображался в представлении. Фрагмент кода представлен ниже: this.CustomTextBlock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));

Может ли кто-нибудь предложить мне, как рассчитать фактическую ширину и фактическую высоту для элементов управления на платформе WPF, а также объяснить мне, почему метод измерения не обеспечивает фактического ширина и фактическая высота для элемента управления на платформе WPF?

Я также прикрепил ссылку для загрузки проекта ниже: [https://www.syncfusion.com/downloads/support/directtrac/general/ze/BViewWpf1629602448] [DemoProject]

1 Ответ

0 голосов
/ 29 мая 2020

UIElement.Measure - это метод, который выполняется механизмом компоновки фреймворка.
Measure выполняется во время первого прохода макета и фактически вычисляет DesiredSize, который используется во втором проходе макета, когда Arrange вызывается. Arrange может использовать (в зависимости от реализации) DesiredSize для размещения своих дочерних элементов. Measure не имеет прямого влияния на фактический размер. Он только рассчитывает максимально доступное пространство. Размер, передаваемый в этот метод, не является обязательным, так как он может быть изменен алгоритмом измерения. Аргументом считается минимально доступное пространство.

Если вы хотите изменить размер FrameworkElement, установите свойства Width и Height.

Чтобы TextBlock не занимал максимально доступное пространство по горизонтали, просто установите для HorizontalAlignment значение, отличное от значения по умолчанию HorizontalAlignment.Stretch:

<!-- Use Padding to add additional space -->
<TextBlock Text="Minimum sized TextBlock" 
           HorizontalAlignment="Left" />
...