[wpf] xaml wpf의 텍스트 상자에 포커스 설정

이 포럼 및 다른 게시물에 대한 일부 게시물에도 불구하고 .NET에 초점을 맞추는 방법을 알려주는 내용을 찾을 수 없습니다 TextBox.

많은 레이블과 텍스트 상자가있는 userControl이 있습니다. 양식이로드되면 특정 텍스트 상자에 포커스를두고 싶습니다.

tabIndex를 설정했지만 작동하지 않는 것 같습니다.

어떤 제안?



답변

FocusManager.FocusedElement이 목적으로 연결된 속성을 사용할 수 있습니다 . 다음은 기본적으로 포커스를 TxtB로 설정하는 코드입니다.

<StackPanel Orientation="Vertical" FocusManager.FocusedElement="{Binding ElementName=TxtB}">
    <TextBox x:Name="TxtA" Text="A" />
    <TextBox x:Name="TxtB" Text="B" />
</StackPanel>

TxtB.Focus()XAML에서이 작업을 수행하지 않으려는 경우 코드 숨김에서 사용할 수도 있습니다 .


답변

이 속성을 TextBox에 직접 적용 할 수 있습니다.

<TextBox Text="{Binding MyText}" FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"/>


답변

나는 WPF를 처음 사용하고 위의 예제를 읽었으며 주어진 xaml 코드 예제를 사용하여 텍스트 상자에 포커스를 설정하려고 시도한 비슷한 경험이있었습니다. 즉, 위의 모든 예제가 작동하지 않았습니다.

내가 찾은 것은 페이지 요소에 FocusManager.FocusElement를 배치해야한다는 것입니다. Window를 부모 요소로 사용했다면 이것이 아마 잘 작동 할 것이라고 가정합니다. 어쨌든, 여기 나를 위해 일한 코드가 있습니다.

 <Page x:Class="NameOfYourClass"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  mc:Ignorable="d"
  Title="Title"
  Height="720"
  Width="915"
  Background="white"
  Loaded="pgLoaded"
  FocusManager.FocusedElement="{Binding ElementName=NameOfYourTextBox}">

  <!-- Create child elements here. -->

  </Page>


답변

초점을 맞추려는 요소를 다음과 같이 바인딩하십시오.

FocusManager.FocusedElement= "{Binding ElementName= Comobox1}"

그리드 또는 그룹 상자 등


답변

FocusManager는 지능적이지 않아서 약간 혼란 스러웠습니다. 전체 속성을 입력했는데 제대로 작동했습니다.

FocusManager.FocusedElement = “{Binding ElementName = MyTextBox}”


Microsoft Visual Studio Enterprise 2015 버전 14.0.23107.0/C#/WPF


답변

완전성을 위해 코드 뒤에서이를 처리하는 방법도 있습니다 (예 : 어떤 이유로 든 동적으로 생성되고 XAML에 존재하지 않는 컨트롤의 경우). 창의 Loaded 이벤트에 처리기를 연결 한 다음 원하는 컨트롤의 “.Focus ()”메서드를 사용합니다. 아래의 베어 본 예.

public class MyWindow
{
    private VisualCollection controls;
    private TextBox textBox;

    // constructor
    public MyWindow()
    {
        controls = new VisualCollection(this);
        textBox = new TextBox();
        controls.Add(textBox);

        Loaded += window_Loaded;
    }

    private void window_Loaded(object sender, RoutedEventArgs e)
    {
        textBox.Focus();
    }
}


답변

실험에서 xaml 솔루션

FocusManager.FocusedElement="{Binding ElementName=yourElement}"

창 계층 구조에서 가장 높은 요소 (일반적으로 Window 또는 다른 모든 항목을 배치 한 Grid)에 배치 할 때 가장 잘 작동하는 것 같습니다.