programing

WPF의 텍스트 상자에 포커스 설정

showcode 2023. 5. 20. 11:02
반응형

WPF의 텍스트 상자에 포커스 설정

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

다음 코드가 있습니다.

txtCompanyID.Focusable = true;
txtCompanyID.Focus();

...하지만 효과가 없습니다.

감 잡히는 게 없어요?

XAML에서:

<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
   <TextBox Name="Box" />
</StackPanel>

지금까지 아무도 왜 질문의 코드가 작동하지 않는지 설명하지 않았습니다.윈도우의 생성자에 코드가 배치된 것 같습니다.하지만 현재로서는 초점을 맞추기에는 너무 이른 시기입니다.이 작업은 창에서 상호 작용할 준비가 되면 수행해야 합니다.코드에 가장 적합한 위치는 Loaded 이벤트입니다.

public KonsoleWindow() {
  public TestWindow() {
    InitializeComponent();
    Loaded += TestWindow_Loaded;
  }

  private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
    txtCompanyID.Focus();
  }
}

Focus Manager를 시도합니다.초점 요소 설정

FocusManager.SetFocusedElement(parentElement, txtCompanyID)
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);

msdn:

키보드 포커스가 있는 요소는 전체 바탕 화면에 하나만 있을 수 있습니다.WPF에서 키보드 포커스가 있는 요소는 IsKeyboardFocus가 true로 설정됩니다.

설정 라인 이후에 중단하고 다음 값을 확인할 수 있습니다.IsKeyboardFocused소유물.또한 정말로 그 선에 도달했는지 또는 그 이후에 초점을 맞추기 위해 다른 요소를 설정했는지도 확인합니다.

사용해 보십시오.MyTextBox.Focus ( );

스택 패널이 아닌 그리드를 사용했기 때문에 이 모든 것이 제대로 작동하지 않았습니다.

저는 마침내 이 예를 찾았습니다: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/

다음과 같이 수정했습니다.

'Resources' 섹션에서 다음을 수행합니다.

    <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()응용 프로그램이 다른 구성 요소를 렌더링하기 전에 호출됩니다.

뒤에 있는 코드에서는 이렇게 해야만 이를 달성할 수 있습니다.

 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            txtIndex.Focusable = true;
            txtIndex.Focus();
        }

참고: 창이 로드되기 전에 작동하지 않습니다.

또 다른 가능한 솔루션은 무료 DevExpress MVVM Framework에서 제공하는 FocusBehavior를 사용하는 것입니다.

<TextBox Text="This control is focused on startup">
    <dxmvvm:Interaction.Behaviors>
        <dxmvvm:FocusBehavior/>
    </dxmvvm:Interaction.Behaviors>
</TextBox>

로드될 때, 특정 이벤트가 발생하거나 속성이 변경될 때 컨트롤의 초점을 맞출 수 있습니다.

언급URL : https://stackoverflow.com/questions/1345391/set-focus-on-textbox-in-wpf

반응형