如何更改 ComboBox 列表以在 WPF 中以编程方式显示在对象上方?
How to change ComboBox list to appear above object programatically in WPF?
如何仅使用 C# 将组合框列表更改为始终显示在组合框对象上方(无 XML)?
属性 DropDownStyle 在这种情况下似乎不可用。
首先,请注意 DropDownStyle
仅适用于 Windows Forms ComboBox, not a WPF ComboBox。
因此,您需要使用 WPF 以不同的方式处理此问题。基本上,WPF 使用样式和模板来确定控件的视觉方面。
对于这个特殊问题,您需要编辑 ComboBox 的 Popup
控件的 Placement
属性,它是其 ControlTemplate 的一部分。
这是一个如何执行此操作的示例(将其放在代码隐藏中):
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
// create a combo box
var comboBox = new ComboBox
{
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Width = 200
};
// add some items
comboBox.Items.Add(new ComboBoxItem { Content = "Apple" });
comboBox.Items.Add(new ComboBoxItem { Content = "Banana" });
comboBox.Items.Add(new ComboBoxItem { Content = "Orange" });
// add the combo box to your window
AddChild(comboBox);
// apply the control template
comboBox.ApplyTemplate();
// obtain the popup (which is named "PART_Popup") from the control template
var controlTemplate = comboBox.Template;
var popup = (Popup)controlTemplate.FindName("PART_Popup", comboBox);
// set the placement of the popup
if (popup != null) popup.Placement = PlacementMode.Top;
}
最后一点:我怎么知道有一个叫"PART_Popup"的Popup?有几种方法:
- 您可以使用 Visual Studio 设计器为任何内置控件实际生成标准控件模板的副本。具体来说,在 window 中放置一个控件(例如 ComboBox),转到文档大纲,右键单击 ComboBox,然后 select "Edit Template...".
- 您可以使用 Snoop utility 在您的 window 中实际看到 controls/graphics 的 "visual tree"。
如何仅使用 C# 将组合框列表更改为始终显示在组合框对象上方(无 XML)? 属性 DropDownStyle 在这种情况下似乎不可用。
首先,请注意 DropDownStyle
仅适用于 Windows Forms ComboBox, not a WPF ComboBox。
因此,您需要使用 WPF 以不同的方式处理此问题。基本上,WPF 使用样式和模板来确定控件的视觉方面。
对于这个特殊问题,您需要编辑 ComboBox 的 Popup
控件的 Placement
属性,它是其 ControlTemplate 的一部分。
这是一个如何执行此操作的示例(将其放在代码隐藏中):
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
// create a combo box
var comboBox = new ComboBox
{
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Width = 200
};
// add some items
comboBox.Items.Add(new ComboBoxItem { Content = "Apple" });
comboBox.Items.Add(new ComboBoxItem { Content = "Banana" });
comboBox.Items.Add(new ComboBoxItem { Content = "Orange" });
// add the combo box to your window
AddChild(comboBox);
// apply the control template
comboBox.ApplyTemplate();
// obtain the popup (which is named "PART_Popup") from the control template
var controlTemplate = comboBox.Template;
var popup = (Popup)controlTemplate.FindName("PART_Popup", comboBox);
// set the placement of the popup
if (popup != null) popup.Placement = PlacementMode.Top;
}
最后一点:我怎么知道有一个叫"PART_Popup"的Popup?有几种方法:
- 您可以使用 Visual Studio 设计器为任何内置控件实际生成标准控件模板的副本。具体来说,在 window 中放置一个控件(例如 ComboBox),转到文档大纲,右键单击 ComboBox,然后 select "Edit Template...".
- 您可以使用 Snoop utility 在您的 window 中实际看到 controls/graphics 的 "visual tree"。