Есть такой замечательный компонент в Silverlight-е, который во многих случаях намного удобнее Combobox-а, и называется он AutoCompleteBox.
Но с этим компонентом есть достаточно большое количество проблем. Основная - выравнивание длинного текста. О чем я? Вот смотрите:
Вроде все нормально. Но как только мы выберем строку и перейдем на следующий контрол:
Видите выравнивание какое неудобное? Как порешать эту проблему смотрим в далее...
Как выяснилось, данный компонент производный от TextBox и у него даже есть соответствующее свойство TextBoxStyle, типа через него можно передать стиль для вложенного TextBox-а. Потанцевав вокруг этого стиля с бубном проблему так и не решил.Пришлось идти другим путем. А именно подписаться на обработчик LostFocus. То что там пришлось писать, тоже не комильфо, но по крайней мере работает:
Круто? Выглядит так:
Ну и в качестве бонуса. При попадании фокуса в AutoCompleteBox, список не выпадает, что может ввести пользователей в заблуждение. Для этого можно сделать вот такой финт ушами:
Но он не работает! Надо еще прописать разрешение на разворачивание при отсутствии символов, для этого достаточно в XAML-е прописать:
Собственно все.
Но с этим компонентом есть достаточно большое количество проблем. Основная - выравнивание длинного текста. О чем я? Вот смотрите:
Вроде все нормально. Но как только мы выберем строку и перейдем на следующий контрол:
Видите выравнивание какое неудобное? Как порешать эту проблему смотрим в далее...
Как выяснилось, данный компонент производный от TextBox и у него даже есть соответствующее свойство TextBoxStyle, типа через него можно передать стиль для вложенного TextBox-а. Потанцевав вокруг этого стиля с бубном проблему так и не решил.Пришлось идти другим путем. А именно подписаться на обработчик LostFocus. То что там пришлось писать, тоже не комильфо, но по крайней мере работает:
private void autoCompleteBox1_LostFocus(object sender, RoutedEventArgs e) { var grid = VisualTreeHelper.GetChild(autoCompleteBox1, 0); var textbox = VisualTreeHelper.GetChild(grid, 0) as TextBox; textbox.SelectionStart = 0; textbox.SelectionLength = 0; }
Круто? Выглядит так:
Ну и в качестве бонуса. При попадании фокуса в AutoCompleteBox, список не выпадает, что может ввести пользователей в заблуждение. Для этого можно сделать вот такой финт ушами:
private void autoCompleteBox1_GotFocus(object sender, RoutedEventArgs e) { autoCompleteBox1.IsDropDownOpen = true; }
Но он не работает! Надо еще прописать разрешение на разворачивание при отсутствии символов, для этого достаточно в XAML-е прописать:
<sdk:AutoCompleteBox MinimumPrefixLength="0"
Собственно все.
Комментариев нет:
Отправить комментарий