J'ai un UserControl qui incorpore une zone de texte. Je veux définir le focus clavier à cette zone de texte par programme lorsque l'utilisateur clique sur un bouton. J'ai essayé ceci:Comment faire pour définir le focusfocus à une zone de texte dans un UserControl par programme?
private void Button_Click(object sender,EventArgs e)
{
Keyboard.Focus(MyUserControl);
}
pas de chance. Ensuite, je l'exposais dans la zone de texte UserControl si une propriété de type TextBox
private void Button_Click(object sender,EventArgs e)
{
Keyboard.Focus(MyUserControl.TextBox);
}
encore pas de chance. Enfin, j'ai créé un eventhandler dans UserControl pour gérer l'événement GotKeyboardFocus, en appelant la méthode Keyboard.Focus dans la zone de texte qui s'y trouve.
Encore une fois pas de chance ?!
Comment faire ceci?
EDIT: Le problème n'est pas lié à UserControls. C'est un problème lorsque vous essayez de passer le focus à un autre UIElement dans un Click ou un MouseDownHandler. Le code XAML ci-dessous raconte leur propre histoire: le focus passe à la zone de texte, mais il est renvoyé par la zone de liste.
<Window x:Class="FocusSpike.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<TextBox Name="FocusedTextBox" Height="30">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Text" Value="I am unfocused..."/>
<Setter Property="Opacity" Value=".3"/>
<Style.Triggers>
<Trigger Property="IsKeyboardFocused" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard AutoReverse="True">
<DoubleAnimation Storyboard.TargetProperty="FontSize" To="20"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Setter Property="Text" Value="I am focused!"/>
<Setter Property="Opacity" Value="1"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<Button>Click to steal focus.</Button>
<ListBox>
<ListBoxItem GotFocus="Listbox_GotFocus">
<Label MouseDown="ListBoxItem_MouseDown">
Click to restore focus
</Label>
</ListBoxItem>
</ListBox>
</StackPanel>
</Window>
using System.Windows;
using System.Windows.Input;
namespace FocusSpike
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
FocusedTextBox.Focus();
}
private void ListBoxItem_MouseDown(object sender, MouseButtonEventArgs e)
{
Keyboard.Focus(FocusedTextBox);//This does not work, remove it!
}
private void Listbox_GotFocus(object sender, RoutedEventArgs e)
{
//Keyboard.Focus(FocusedTextBox);//uncomment to restore focus!
}
}
}
ou MyUserControl.TextBox.Focus() – Zenuka
Ouais, juste que parfois il ne les voit pas ... – tsilb
Merci pour la réponse. Cela ne marche pas cependant ;-) Je commence à soupçonner que l'accent est mis sur la zone de texte mais immédiatement volé. Je vais enquêter plus loin. – Dabblernl