| 

.NET C# Java Javascript Exception

3
Gibt es eine Möglichkeit, die TextBox einer ComboBox und eines DatePickers zu ermitteln?

Ich weiß ansonsten nicht, wie ich z.B. die aktuelle Markierung oder die Eingabeposition ermitteln und/oder setzen kann. Ich habe diese Möglichkeiten in den genannten Steuerelementen nicht gefunden, habe aber gelesen, dass beide ein TextBox-Control enthalten. So könnte man, wenn man denn rankäme, diese Aufgaben darüber erledigen, hoffe ich.
21.03.2011
Andreas Ganzer 1,4k 1 8
Möchtest du an den Wert kommen oder an die "TextBox-Instanz"?
Konstantin 21.03.2011
An das TextBox-Exemplar. Der Wert interessiert mich hier nicht. Wie gesagt, ich muss die aktuelle Markierung (SelectionStart, SelectionLength) ermitteln und setzen können.
Andreas Ganzer 21.03.2011
2 Antworten
1
Das sollte über ein Template gehen.
Siehe bei Stackoverflow: Custom WPF DatePickerTextBox Template Help

<DatePicker>
<DatePicker.Resources>
<Style TargetType="{x:Type DatePickerTextBox}">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<TextBox x:Name="PART_TextBox"
Text="{Binding Path=SelectedDate, RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DatePicker.Resources>
</DatePicker>
21.03.2011
Jürgen Luhr 7,1k 2 9
0
Für die folgende Lösung werden einige vielleicht die Hände über dem Kopf zusammenschlagen, aber was ebenfalls funktioniert, ist folgender Code (nicht dokumentiert und daher nicht sicher, ob die nächste .NET-Version das noch unterstützt):

TextBox tb = null;

// DatePicker-Eigenschaft heißt TextBox:
PropertyInfo pi = theDatePicker.GetType().GetProperty("TextBox", BindingFlags.NonPublic | BindingFlags.Instance);

if( pi != null )
tb = pi.GetValue(theDatePicker, null) as TextBox;

if( tb != null )
{
// ...
}


TextBox tb = null;

// ComboBox-Eigenschaft heißt EditableTextBoxSite:
PropertyInfo pi = theComboBox.GetType().GetProperty("EditableTextBoxSite", BindingFlags.NonPublic | BindingFlags.Instance);

if( pi != null )
tb = pi.GetValue(theComboBox, null) as TextBox;

if( tb != null )
{
// ...
}


Beide Eigenschaften sind null, solange das Loaded-Ereignis für die ComboBox bzw. den DatePicker noch nicht ausgelöst wurde.
21.03.2011
Andreas Ganzer 1,4k 1 8

Stelle deine .net-Frage jetzt!