如何使WPF Combobox的Dropdown保持打开和放置
我希望Combobox可以编辑,并且下拉保持打开状态。
目前已设置这些属性:
IsEditable="True" IsDropDownOpen="True" StaysOpenOnEdit="True"
每当用户单击输入文本框或焦点更改为其他控件时,dorpdown将关闭。 因此,我更新了模板( WPF主题中包含的模板:BureauBlue),在此特定情况下使Popup
IsOpen="true"
,使下拉列表保持打开状态,但现在当用户拖动并移动窗口的位置时,下拉列表将不会更新自动定位并保持原状。
如何在打开时自动更新其位置 ?
你可以使用这里描述的技巧: http : //social.msdn.microsoft.com/Forums/en-US/wpf/thread/27950e73-0007-4e0b-9f00-568d2db1d979
我创建了一个Blend行为 ,可以很容易地使用任何弹出窗口:
/// /// A behavior that forces the associated popup to update its position when the /// location has changed. /// public class AutoRepositionPopupBehavior : Behavior { 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)); } }
以下是如何应用行为的示例:
- .NET线程是否与操作系统线程不同?
- Marshal.AllocHGlobal VS Marshal.AllocCoTaskMem,Marshal.SizeOf VS sizeof()
- 使用itextsharp检查pdf是否受密码保护
- 如何使用.NETfunction构建检测输入字符串字符语言?
- 理解C#4.0中的协方差和逆变
- Process.Dispose()实际上做了什么?
- 为什么CLRexception发生FatalExecutionEngineError?
- (500)内部服务器错误 – 使用api发送Web请求时
- Marshal.GenerateGuidForType(Type)和Type.GUID之间有什么区别?