[c#] WPF의 텍스트 상자에 포커스 설정

TextBoxWPF 에서 요소에 포커스를 설정하는 방법

이 코드가 있습니다.

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();
  }
}


답변

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()응용 프로그램이 다른 구성 요소를 렌더링하기 전에 호출이 호출되기 때문에 다른 솔루션이 작동하지 않을 수 있음을 이해합니다 .