我想创建一种行为,当失去焦点时,ComboBox
下拉列表正在关闭。
我的第一次尝试是:
public class ComboBoxLostFocusBehavior : Behavior<ComboBox> {
protected override void OnAttached() {
base.OnAttached();
AssociatedObject.LostFocus += (object sender, RoutedEventArgs e) => AssociatedObject.IsDropDownOpen = false;
}
}
但LostFocus事件仅指切换部分,而不是物品容器。
如何参考下拉列表?
我想:当下拉列表丢失焦点时 - &gt;下拉正在关闭
修改
我认为这个问题被误解了。 ComboBox有2个主要部分,它在关闭时看到的部分(让我们称之为A)和下拉列表(让我们称之为B)。 LostFocus仅指A部分。所以在我提出的情况中,这是错误的,你打开下拉列表,将鼠标从A移动到B,当刚离开A到达B时,B关闭(通过行为)。总而言之,LostFocus是错误的方式,我正在寻找其他东西暗示下拉(B)失去焦点。
答案 0 :(得分:0)
如果我从问题/评论中正确理解你,你想知道在打开下拉列表后组合框是否会失去焦点。
您可以在LostFocus事件中使用IsDropDownOpen
属性,例如
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.LostFocus += (s, e) =>
{
if (AssociatedObject.IsDropDownOpen)
{
//dropdown is open and control is loosing focus, you may perhaps want to close it
AssociatedObject.IsDropDownOpen = false;
}
};
}
或者您可以附加DropDownOpened
&amp; DropDownClosed
事件并保持自己的状态,例如
bool isDropDownOpen;
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.DropDownOpened += (s, e) => isDropDownOpen = true;
AssociatedObject.DropDownClosed += (s, e) => isDropDownOpen = false;
AssociatedObject.LostFocus += (s, e) =>
{
if (isDropDownOpen)
{
//dropdown is open and control is loosing focus, you may perhaps want to close it
AssociatedObject.IsDropDownOpen = false;
}
};
}
或者可能根据需要以其他方式使用这些事件,例如
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.DropDownClosed += (s, e) =>
{
//your action on dropdown close
};
}