C# 如何获得WPF中连接到组合框的DropDownList的实际高度?
我想得到组合框的实际高度加上打开时下拉框的高度。但是,组合框上似乎没有可访问的属性来提供此属性 属性只给出基本组合框的高度,而不是下拉列表 这是一个令人恼火的问题,因为我想我可以在调试器中看到属性上设置的值,但是由于某种原因,ItemsHost.ActualHeight无法在代码中访问该属性 见下文: 但是,无法从代码中访问具有下拉列表高度的ItemsHostC# 如何获得WPF中连接到组合框的DropDownList的实际高度?,c#,wpf,combobox,C#,Wpf,Combobox,我想得到组合框的实际高度加上打开时下拉框的高度。但是,组合框上似乎没有可访问的属性来提供此属性 属性只给出基本组合框的高度,而不是下拉列表 这是一个令人恼火的问题,因为我想我可以在调试器中看到属性上设置的值,但是由于某种原因,ItemsHost.ActualHeight无法在代码中访问该属性 见下文: 但是,无法从代码中访问具有下拉列表高度的ItemsHost 该属性不可访问,因为它未定义为public。您可以使用反射获取其值: 但是你不应该这样做,因为这个房产是非公有的 相反,您可以获取对
该属性不可访问,因为它未定义为
public
。您可以使用反射获取其值:
但是你不应该这样做,因为这个房产是非公有的
相反,您可以获取对组合框
的弹出窗口
元素的引用,并检查其子项的实际高度
属性,例如:
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;
不确定为什么它不可访问,但请尝试获取一个项目的高度*项目数+ComboBox的高度,因为这正是我现在要做的!它可以工作,但不是完美的像素。组合框略高于下拉列表中的项目。碰巧我能够扣除实际高度的顶部和底部,以准确估计下拉列表中每个项目的高度。别担心,我投了赞成票!但我没有足够的声誉让它伤心地注册。编辑-看起来就像我从昨天开始做的一样,有我的投票权!!