Bol*_*olu 3 .net c# wpf combobox drop-down-menu
我希望Combobox可以编辑,并且下拉保持打开状态.
目前已设置这些属性:
IsEditable="True" IsDropDownOpen="True" StaysOpenOnEdit="True"
Run Code Online (Sandbox Code Playgroud)
每当用户单击输入文本框或焦点更改为其他控件时,dorpdown将关闭.所以我更新了模板(WPF主题中包含的模板:BureauBlue),以便Popup IsOpen="true"在此特定情况下使下拉列表保持打开状态,但现在当用户拖动并移动窗口的位置时,下拉列表将不会自动更新其位置并保持在旧职位.
如何在打开时自动更新其位置?
你可以使用这里描述的技巧:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/27950e73-0007-4e0b-9f00-568d2db1d979
我创建了一个Blend行为,可以很容易地使用任何弹出窗口:
/// <summary>
/// A behavior that forces the associated popup to update its position when the <see cref="Popup.PlacementTarget"/>
/// location has changed.
/// </summary>
public class AutoRepositionPopupBehavior : Behavior<Popup> {
public Point StartPoint = new Point(0, 0);
public Point EndPoint = new Point(0, 0);
protected override void OnAttached() {
base.OnAttached();
if (AssociatedObject.PlacementTarget != null) {
AssociatedObject.PlacementTarget.LayoutUpdated += OnPopupTargetLayoutUpdated;
}
}
void OnPopupTargetLayoutUpdated(object sender, EventArgs e) {
if (AssociatedObject.IsOpen) {
ResetPopUp();
}
}
public void ResetPopUp() {
// The following trick that forces the popup to change it's position was taken from here:
// http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/27950e73-0007-4e0b-9f00-568d2db1d979
Random random = new Random();
AssociatedObject.PlacementRectangle = new Rect(new Point(random.NextDouble() / 1000, 0), new Size(75, 25));
}
}
Run Code Online (Sandbox Code Playgroud)
以下是如何应用行为的示例:
<Popup ...>
<i:Interaction.Behaviors>
<Behaviors:AutoRepositionPopupBehavior />
</i:Interaction.Behaviors>
</Popup>
Run Code Online (Sandbox Code Playgroud)