J'ai une logique avec ma boîte de texte qui dit, au foyer déplacer le début de sélection au dernier caractère, de sorte que la personne d'édition puisse continuer à écrire juste.TextBox dans DataTemplate, sur GotFocus ne peut pas affecter SelectionStart?
Cela a parfaitement fonctionné avec ceci:
private void TextBox_GotFocus(object sender, EventArgs e)
{
var textBox = sender as TextBox;
if (textBox == null) return;
textBox.SelectionStart = textBox.Text.Length;
}
et
<Style TargetType="{x:Type TextBox}">
<EventSetter Event="GotFocus" Handler="TextBox_GotFocus"/>
</Style>
et
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Name="SomeTextBox" Text="{Binding Path=Pressure, UpdateSourceTrigger=PropertyChanged}" Padding="2,0,0,0" />
<DataTemplate.Triggers>
<Trigger SourceName="SomeTextBox" Property="IsVisible" Value="True">
<Setter TargetName="SomeTextBox" Property="FocusManager.FocusedElement" Value="{Binding ElementName=SomeTextBox}"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
mais quand je me suis déplacé cela:
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentControl Content="{Binding Path=Pressure, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ContentTemplate="{StaticResource DataGridTextBoxEdit}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
et un modèle réutilisable:
<DataTemplate x:Key="DataGridTextBoxEdit">
<TextBox Name="TextBox" Text="{Binding Content, RelativeSource={RelativeSource AncestorType=ContentControl}}" Padding="2,0,0,0" />
<DataTemplate.Triggers>
<Trigger SourceName="TextBox" Property="IsVisible" Value="True">
<Setter TargetName="TextBox" Property="FocusManager.FocusedElement" Value="{Binding ElementName=TextBox}"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
juste cessé de fonctionner. L'événement GotFocus se déclenche, mais je ne peux tout simplement pas assigner quoi que ce soit à SelectionStart, il ne le sauvegarde pas. A même essayé hardcoding:
private void TextBox_GotFocus(object sender, EventArgs e)
{
var textBox = sender as TextBox;
if (textBox == null) return;
textBox.SelectionStart = 5;
}
mais ne fonctionnait pas. Il est également intéressant de noter que le texte est vide, seul DataContext est rempli à ce stade, cependant comme SelectionStart ne prend rien (sauvegarde), ce n'est pas bon pour moi.
Qu'est-ce que je fais mal?
Cordialement, Vladan
Il est parfait! Je vous remercie! –