Używam edytowalnego elementu ComboBox w wpf, ale gdy próbuję ustawić ostrość z kodu C#, wyświetlany jest tylko wybór. ale chcę przejść do opcji edycji (kursor powinien być wyświetlany w celu wprowadzenia użytkownika).Jak dodać fokus do edytowalnego składnika ComboBox w WPF
Odpowiedz
Można spróbować wynikające z ComboBox i dostępu do wewnętrznej TextBox, tak:
public class MyComboBox : ComboBox
{
TextBox _textBox;
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
_textBox = Template.FindName("PART_EditableTextBox", this) as TextBox;
if (_textBox != null)
{
_textBox.GotKeyboardFocus += _textBox_GotFocus;
this.Unloaded += MyComboBox_Unloaded;
}
}
void MyComboBox_Unloaded(object sender, System.Windows.RoutedEventArgs e)
{
_textBox.GotKeyboardFocus -= _textBox_GotFocus;
this.Unloaded -= MyComboBox_Unloaded;
}
void _textBox_GotFocus(object sender, System.Windows.RoutedEventArgs e)
{
_textBox.Select(_textBox.Text.Length, 0); // set caret to end of text
}
}
W kodzie będzie go używać tak:
<Window x:Class="EditableCbox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:EditableCbox"
Title="Window1" Height="300" Width="300">
...
<local:MyComboBox x:Name="myComboBox" IsEditable="True" Grid.Row="0" Margin="4">
<ComboBoxItem>Alpha</ComboBoxItem>
<ComboBoxItem>Beta</ComboBoxItem>
<ComboBoxItem>Gamma</ComboBoxItem>
</local:MyComboBox>
...
</Window>
Rozwiązanie to nieco niebezpieczne, jednak ponieważ w nadchodzących wersjach WPF Microsoft może również zdecydować o dodaniu obsługi zdarzeń GotKeyboardFocus (lub podobnych programów obsługi zdarzeń), które mogą wchodzić w konflikt z obsługą zdarzeń w MyComboBox.
Można spróbować tego kodu:
var textBox = (comboBox.Template.FindName("PART_EditableTextBox", comboBox) as TextBox);
if (textBox != null)
{
textBox.Focus();
textBox.SelectionStart = textBox.Text.Length;
}
Żaden kod cytowany tutaj nie działa. –
@RAJK Ten kod działał idealnie dla mnie. Poprawnie rozwiązuje problem konieczności ustawiania ostrości na edytowalnym polu wyboru, gdy okno jest wyświetlane po raz pierwszy. To, co nie zostało wyraźnie powiedziane, to umieszczenie kodu w załadowanym zdarzeniu okna zawierającego edytowalny combobox. –
Idealny! Rozwiązałem wiele problemów! Dziękuję bardzo! –
Na podstawie odpowiedzi z user128300 powyżej wymyśliłem nieco prostsze rozwiązanie. W konstruktorze lub ContextChangedHandler kod czeka na kontroli mają być załadowane przed oddaniem nacisk na element UI
myComboBox.GotFocus += MyComboBoxGotFocus;
myComboBox.Loaded += (o, args) => { myComboBox.Focus(); };
Następnie w ostrości nawet obsługi I zaznaczyć cały tekst od początku do końca
private void MyComboBoxGotFocus(object sender, RoutedEventArgs e)
{
var textBox = myComboBox.Template.FindName("PART_EditableTextBox", myComboBox) as TextBox;
if (textBox != null)
textBox.Select(0, textBox.Text.Length);
}
W XAML combobox jest edytowalny. Wybierając cały tekst, gdy użytkownik wpisz klucz jest zresetowanie poprzednią wartość
<ComboBox x:Name="myComboBox" IsEditable="True" />
podstawie odpowiedzi Rikker serg, można użyć tego kodu w konstruktorze (po InitializeComponent) i wysyła go zamiast konieczności tworzenia niestandardowych kontrolki lub programy obsługi zdarzeń.
public NewMessageWindow()
{
InitializeComponent();
Dispatcher.BeginInvoke(new Action(() =>
{
var textBox = myComboBox.Template.FindName("PART_EditableTextBox", cbUsers) as TextBox;
if (textBox != null)
{
textBox.Focus();
textBox.SelectionStart = textBox.Text.Length;
}
}));
}
- 1. Jak zastosować sprawdzanie pisowni do Edytowalnego elementu ComboBox w pakiecie WPF
- 2. wiążących combobox do innego combobox w WPF
- 3. Nie można ustawić wartości DropDownHeight składnika ComboBox
- 4. Dodawanie elementów do comboBox w WPF
- 5. fokus autocompletebox w wpf
- 6. WPF: Binding do ComboBox SelectedItem
- 7. Edytowalne przez WPF ComboBox SelectAll po kliknięciu
- 8. VS2010/C# Jak ustawić domyślną wartość składnika ComboBox w IDE?
- 9. WIX dodać nowy plik do składnika współużytkowanego
- 10. Jak wypełnić wpf combobox w xaml
- 11. niestandardowe combobox w wpf Application
- 12. WPF IsEditable w ComboBox - jak usunąć autouzupełnianie
- 13. Wpf combobox binding
- 14. WPF: Jak dostosować SelectionBoxItem w ComboBox
- 15. Obsługa komend WPF w ComboBox
- 16. Wykryj fokus utracony z grupy kontrolek WPF
- 17. WPF Binding ComboBox do mojego ViewModel
- 18. WPF i touch - fokus problemu
- 19. wpf datagrid combobox kolumna
- 20. WPF ComboBox MaxDropDownItems
- 21. WPF Combobox DisplayMemberPath
- 22. Jak dodać elementy do combobox w formularzu w Excelu VBA?
- 23. Jak dodać opcję "Wszystkie" do combobox w WPF z powiązaniem z bazy danych
- 24. Stylizacja elementów WPF ComboBox
- 25. Jak dodać DatePicker do DataGridTextColumn w WPF
- 26. Ustaw fokus na pole tekstowe w WPF
- 27. WPF ComboBox Binding to ObservableCollection
- 28. WPF: ComboBox TextSearch, jak to działa?
- 29. WPF ComboBox nie aktualizuje źródła
- 30. WPF: rozwijanej combobox highlightes tekst
Czy mógłbyś podać przykład swojego kodu? PS: Nie zwolniłem cię. – Anvaka