So steigen, habe ich ein Datagrid, die Elemente enthält, die wie folgt aussehen:Datagridcell ein Textblock ist, wenn nach unten gehen, aber TextBox wenn
<DataGridTextColumn Header="Dto 1" Binding="{Binding Path=Dto1}">
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="{x:Type TextBox}">
<EventSetter Event="PreviewKeyDown" Handler="TextBox_PreviewKeyDown"/>
<EventSetter Event="GotFocus" Handler="TextBox_GotFocus"/>
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
Die PreviewKeyDown arbeitet völlig in Ordnung, wenn ich gehe, ich Ich bin problemlos in der Lage, in die Zelle zurückzukehren. So wie ich es sehe, habe ich eine TextBox drin.
Nun, wenn ich versuche, aus der Zelle in einer Veranstaltung zu gehen:
private void dgPropuestas_GotFocus(object sender, RoutedEventArgs e) {
var cell = e.OriginalSource as DataGridCell;
if (cell != null) {
var cp = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(cell, 0), 0) as ContentPresenter;
var tb = cp.Content as TextBlock;
if (tb != null)
tb.Focus();
}
}
(Anmerkung: Ich setzte die VisualTreeHelper Methode zweimal manuell, ich habe die FindVisualChildren, aber ich ging durch den Baum manuell und als ein Akt der Verzweiflung, um ein bisschen zu beschleunigen, habe ich es manuell)
Wenn ich versuche, tb als cp.Content als TextBox zu deklarieren, bekomme ich eine Null. Aus irgendeinem Grund hat der ContentPresenter in einem TextBlock, nicht in einem TextBox. FindVisualChildren (Zelle) gibt ein leeres IEnumerable zurück.
Warum ist das ein Problem? Weil ich in der Lage sein muss, SelectAll() für den Text aufzurufen, und textBlock bietet diese Option nicht an. Jede Hilfe wird sehr geschätzt. Vielen Dank im Voraus!
Später bearbeiten: Offenbar, wenn nicht im Bearbeitungsmodus, enthält das Datagrid einen Textblock. Im Bearbeitungsmodus ein Textfeld. Nun scheint datagrid.BeginEdit() nicht zu funktionieren, da es die TextBox weder initialisiert noch das Ereignis PrepareCellForEditing auslöst.
ich nicht ganz verstehe, was du meinst. Ich habe nur TextBoxes in meinem DataGrid, was ich versuche, den Fokus auf eine andere TextBox zu verschieben. Das ist, ich benutze die Pfeiltasten, um durch das DataGrid zu navigieren. Wenn ich also eine Pfeiltaste drücke, wird der Fokus auf die nächste Zelle gesetzt. Es gibt dort, wo ich in der Lage sein soll, meine TextBox auszuwählen und eine SelectAll() –
zu machen. Sie müssen dann nicht nur auf 'Loaded' fokussieren und auswählen, was Sie auf der' TextBox' abonnieren können? –
(Auch die Standard-Textspalte fokussiert und wählt standardmäßig Text aus, sodass Sie den Bearbeitungsmodus nur programmgesteuert eingeben müssen.) –