it-swarm.com.de

Setzen Sie den Fokus auf ein Textfeld in xaml wpf

Trotz einiger Beiträge in diesem und in anderen Foren kann ich nichts finden, das mir sagt, wie ich den Fokus auf eine TextBox setzen kann.

Ich habe ein UserControl mit vielen Labels und TextBoxen. Wenn das Formular geladen ist, möchte ich, dass eine bestimmte TextBox den Fokus hat.

Ich habe den TabIndex eingestellt, aber das schien nicht zu funktionieren.

Irgendwelche Vorschläge?

86
user9969

Zu diesem Zweck können Sie die angefügte Eigenschaft FocusManager.FocusedElement verwenden. Hier ist ein Stück Code, der den Fokus standardmäßig auf TxtB setzt.

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

Sie können auch TxtB.Focus() in Ihrem Code-Behind verwenden, wenn Sie dies in XAML nicht möchten.

167

Sie können diese Eigenschaft direkt auf das Textfeld anwenden:

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

Ich bin neu in der Verwendung von WPF und beim Durchlesen der obigen Beispiele. Ich hatte eine ähnliche Erfahrung, als ich den Fokus auf ein Textfeld mit den angegebenen xaml-Codebeispielen konzentrierte.

Was ich fand, war, dass ich das FocusManager.FocusElement im Seitenelement platzieren musste. Ich gehe davon aus, dass dies wahrscheinlich auch funktionieren würde, wenn Sie ein Fenster als übergeordnetes Element verwenden. Wie auch immer, hier ist der Code, der für mich funktioniert hat.

 <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>
5
Joseph Mawer

Vom experimentieren herum die xaml-Lösung

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

scheint am besten zu funktionieren, wenn Sie es im obersten Element der Fensterhierarchie platzieren (normalerweise Window oder das Grid, in dem Sie alles andere platzieren)

0
Tan Jing Yuan

binden Sie das Element, auf das Sie den Fokus richten möchten 

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

in gitter oder gruppenboxen etc 

0
Sufian Bashir

Der FocusManager war nicht intelligent, und das hat mich etwas verwirrt. Ich habe nur das gesamte Attribut eingegeben und es hat funktioniert.

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


Microsoft Visual Studio Enterprise 2015 Version 14.0.23107.0/C#/WPF

0
icernos

Der Vollständigkeit halber gibt es auch eine Möglichkeit, dies mit hinterlegtem Code zu behandeln (z. B. im Fall von Steuerelementen, die aus irgendeinem Grund dynamisch erstellt werden und in XAML nicht vorhanden sind). Hängen Sie einen Handler an das Loaded-Ereignis des Fensters an, und verwenden Sie dann die Methode ".Focus ()" des gewünschten Steuerelements. Bare-Bones-Beispiel unten.

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

In meinem Fall haben die bereitgestellten Antworten nicht funktioniert. Irgendwo im Code nach der InitializeComponent();

Ich musste hinzufügen

MyTextBox.Focus(); und es funktioniert.

0
nPcomp