내 WPF에 간단한 (적어도 그랬다고 생각한) 동작을 추가하고 싶습니다 TextBox
.
사용자가 Escape 키를 누르면 TextBox
편집중인 사용자가 사용자가 편집을 시작했을 때의 텍스트를 가지기를 원하고 TextBox
.
편집 시작 부분에 있던 값에 대한 텍스트를 설정하는 데 문제가 없습니다.
문제는 요소의 초점을 제거하는 것입니다. 포커스를 다른 구성 요소로 옮기고 싶지 TextBox
않고 포커스를 잃고 싶을뿐입니다 . 초점 TextBox
을 잃을 수 있도록 초점을 설정하려면 보이지 않는 요소가 있어야 합니까?
답변
.NET Framework 4에서 Keyboard.ClearFocus();
답변
내가 사용하고있는 코드 :
// Move to a parent that can take focus
FrameworkElement parent = (FrameworkElement)textBox.Parent;
while (parent != null && parent is IInputElement && !((IInputElement)parent).Focusable)
{
parent = (FrameworkElement)parent.Parent;
}
DependencyObject scope = FocusManager.GetFocusScope(textBox);
FocusManager.SetFocusedElement(scope, parent as IInputElement);
답변
파티에 조금 늦었지만 도움이되었으므로 여기에 있습니다.
.Net 3.0 이후 로 나를 위해 트릭을 수행 FrameworkElement
한 MoveFocus 기능이 있습니다.
답변
위의 답변 중 어느 것도 저에게 효과가 없었고 수락 된 답변은 키보드 포커스에서만 작동하므로 다음 접근 방식에 도달했습니다.
// Kill logical focus
FocusManager.SetFocusedElement(FocusManager.GetFocusScope(textBox), null);
// Kill keyboard focus
Keyboard.ClearFocus();
논리적이고 키보드 포커스를 모두 죽입니다.
답변
포커스 가능한 상위 항목에 포커스를 설정할 수 있습니다. 이 코드는 텍스트 상자가 동일한 템플릿 내에 포커스 가능한 조상이없는 템플릿 내부에있는 경우에도 작동합니다.
DependencyObject ancestor = textbox.Parent;
while (ancestor != null)
{
var element = ancestor as UIElement;
if (element != null && element.Focusable)
{
element.Focus();
break;
}
ancestor = VisualTreeHelper.GetParent(ancestor);
}
답변
AFAIK, 초점을 완전히 제거하는 것은 불가능합니다. 창에있는 항목은 항상 포커스를 갖습니다.
답변
Windows Phone 개발에서 방금 수행 Focus()
했거나 PhoneApplicationPagethis.Focus()
에서 수행했으며 매력처럼 작동했습니다.