2017-10-03 3 views
1

ComboBox의 실제 높이와 DropDown을 열 때의 높이를 얻고 싶습니다. 그러나 ComboBox에 액세스 할 수있는 속성이없는 것으로 보입니다.WPF에서 ComboBox에 첨부 된 DropDownList의 실제 높이를 어떻게 구합니까?

ComboBox.ActualHeight 속성은 드롭 다운이 아닌 기본 ComboBox의 높이만 제공합니다.

디버거의 속성에 설정된 값을 볼 수 있지만 어떤 이유로 코드에서 속성에 액세스 할 수 없다고 생각하면 다소 화를 낼 수 있습니다. ItemsHost.ActualHeight.

은 아래를 참조하십시오 : 드롭 다운의 높이를 가지고 나타납니다 코드에서 액세스 할 수 없습니다 그러나

ActualHeight is accessible

, ItemsHost! 이 public으로 정의되어 있지 않기 때문에

enter image description here

+0

그것을 액세스 할 수없는 이유를하지만, 한 항목의 높이를 점점 시도 :

대신 ComboBoxPopup 요소에 대한 참조를 가져 그 ChildActualHeight 속성을 확인, 예 수 아이템 수 + 콤보 박스 높이 –

+0

그것이 지금 내가하는 일이다. 그것은 작동하지만 픽셀 완벽하지는 않습니다. ComboBox는 드롭 다운의 항목보다 약간 높습니다. –

+0

필자는 실제 누적 값의 패딩 상단과 하단을 차감하여 드롭 다운의 각 항목 높이를 정확하게 추정 할 수있었습니다. –

답변

1

속성에 액세스 할 수 없습니다. 당신은 값 사용하여 반사를 얻을 수 : 속성이 이유가 비공개이기 때문에 당신은 정말 생각이 작업을 수행해서는 안

Get property value from string using reflection in C#

. * 확실하지

ComboBox cmb = sender as ComboBox; 
double heightOfComboBox = cmb.ActualHeight; 

double heightOfPopup = 0.0; 
Popup popup = cmb.Template.FindName("PART_Popup", cmb) as Popup; 
if (popup != null) 
{ 
    FrameworkElement fe = popup.Child as FrameworkElement; 
    if (fe != null) 
     heightOfPopup = fe.ActualHeight; 
} 

double totalHeight = heightOfComboBox + heightOfPopup; 
+0

절대적으로 화려한, 내 문제를 완벽하게 해결했습니다! –

+0

내가 걱정하지 마라. upvote! 하지만 슬프게도 등록 할만한 충분한 명성이 없습니다. 수정 - 내가 어제부터하는 것처럼 보이는, 내 upvote을 !! –