TextBox
WPF 에서 요소에 포커스를 설정하는 방법
이 코드가 있습니다.
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...하지만 작동하지 않습니다.
어떤 생각?
TextBox
WPF 에서 요소에 포커스를 설정하는 방법
이 코드가 있습니다.
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...하지만 작동하지 않습니다.
어떤 생각?
답변:
XAML에서 :
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>
아무도 지금까지 질문의 코드가 작동하지 않는 이유를 설명하지 않았습니다. 내 생각 엔 코드가 Window 생성자에 배치되었다는 것입니다. 그러나 현재로서는 초점을 맞추기에는 너무 이르다. Window가 상호 작용할 준비가되면 수행해야합니다. 코드에 가장 적합한 위치는 Loaded 이벤트입니다.
public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}
private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}
Focus()
포커스 상태 매개 변수가 필요합니다. 예txtCompanyId.Focus(FocusState.Keyboard)
FocusManager.SetFocusedElement 시도
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);
msdn :
키보드 포커스가있는 전체 데스크톱에는 하나의 요소 만있을 수 있습니다. WPF에서 키보드 포커스가있는 요소는 IsKeyboardFocused가 true로 설정됩니다.
설정 선을 넘고 IsKeyboardFocused
속성 값을 확인할 수 있습니다. 또한 실제로 그 선에 도달했는지 또는 그 후에 초점을 맞추기 위해 다른 요소를 설정했는지 확인하십시오.
이 시도 : MyTextBox.Focus ( );
StackPanel이 아닌 그리드를 사용했기 때문에 이것 중 어느 것도 나를 위해 일하지 않았습니다.
마침내이 예제를 찾았습니다. http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
다음과 같이 수정했습니다.
'리소스'섹션에서 :
<Style x:Key="FocusTextBox" TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/>
</DataTrigger>
</Style.Triggers>
</Style>
내 그리드 정의에서 :
<Grid Style="{StaticResource FocusTextBox}" />
다른 답변에서 해결책을 찾지 못한 경우 문제를 해결했습니다.
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
TEXTBOX_OBJECT.Focus();
}), System.Windows.Threading.DispatcherPriority.Render);
Focus()
응용 프로그램이 다른 구성 요소를 렌더링하기 전에 호출이 호출되기 때문에 다른 솔루션이 작동하지 않을 수 있음을 이해합니다 .
또 다른 가능한 해결책은 무료 DevExpress MVVM Framework에서 제공 하는 FocusBehavior 를 사용하는 것입니다 .
<TextBox Text="This control is focused on startup">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
컨트롤이로드 될 때, 특정 이벤트가 발생하거나 속성이 변경 될 때 컨트롤에 초점을 맞출 수 있습니다.
Code behind에서는 이렇게해야만 달성 할 수 있습니다.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
txtIndex.Focusable = true;
txtIndex.Focus();
}
참고 : 창이로드되기 전에는 작동하지 않습니다.