Автоматический размер ElementHost для его содержимого

У меня есть небольшой элемент управления WPF, в котором TextBlock с TextWrapping установлен на Wrap. Я пытаюсь разместить это в существующем приложении WinForms. У меня ElementHost закреплен в верхней части формы, и я хотел бы изменить высоту ElementHost в зависимости от высоты, необходимой для TextBlock. Есть ли способ добиться этого?


person Brian Kohrs    schedule 25.02.2011    source источник


Ответы (2)


Механизм изменения размера WinForms отличается от механизма WPF.

Вы пробовали установить AutoSize для свойства ElementHost значение true?

person Emond Erno    schedule 25.02.2011
comment
Это была моя первая мысль, но она ни на что не влияет. - person Brian Kohrs; 26.02.2011
comment
Вы видели этот пост: stackoverflow.com/questions/1086184/ - person Emond Erno; 26.02.2011
comment
У меня работает установка свойства AutoSize для ElementHost, а также AutoSize для элемента управления, содержащего ElementHost, в моем случае Form. - person Mike de Klerk; 30.10.2013
comment
@MikedeKlerk Спасибо, это работает как шарм, в моем случае с ElementHost, содержащимся в Panel - person rucamzu; 23.01.2018

Я нашел ответ здесь

это код из ссылки выше:

public System.Windows.Size GetElementPixelSize(UIElement element) 
{ 
    Matrix transformToDevice; 
    var source = PresentationSource.FromVisual(element);
    if (source != null)
        transformToDevice = source.CompositionTarget.TransformToDevice;
    else     
        using (var Hwndsource = new HwndSource(new HwndSourceParameters()))
            transformToDevice = Hwndsource.CompositionTarget.TransformToDevice;


    if (element.DesiredSize == new System.Windows.Size()) 
        element.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity)); 

    return (System.Windows.Size)transformToDevice.Transform((Vector)element.DesiredSize); 
} 
person oleksa    schedule 19.01.2015