テキストボックスには、フォーカスで選択開始を最後の文字に移動して、編集者が書き続けることができるようにするというロジックがあります。
これはこれで完全に機能しました:
private void TextBox_GotFocus(object sender, EventArgs e)
{
var textBox = sender as TextBox;
if (textBox == null) return;
textBox.SelectionStart = textBox.Text.Length;
}
と
<Style TargetType="{x:Type TextBox}">
<EventSetter Event="GotFocus" Handler="TextBox_GotFocus"/>
</Style>
と
<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>
しかし、これを次の場所に移動したとき:
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentControl Content="{Binding Path=Pressure, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ContentTemplate="{StaticResource DataGridTextBoxEdit}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
および再利用可能なテンプレート:
<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>
動作を停止しました。GotFocusイベントが発生しますが、SelectionStartに何も割り当てることができず、保存されません。ハードコーディングも試みました:
private void TextBox_GotFocus(object sender, EventArgs e)
{
var textBox = sender as TextBox;
if (textBox == null) return;
textBox.SelectionStart = 5;
}
しかし、動作しませんでした。また、テキストは空であり、この時点ではDataContextのみが入力されていることに注意してください。ただし、SelectionStartは何も取得(保存)していないため、私には適していません。
私は何が間違っているのですか?
よろしく、ウラダン