пятница, 9 декабря 2011 г.

Правильное выравнивание текста в AutoCompleteBox

Есть такой замечательный компонент в Silverlight-е, который во многих случаях намного удобнее Combobox-а, и называется он AutoCompleteBox.
Но с этим компонентом есть достаточно большое количество проблем. Основная - выравнивание длинного текста. О чем я? Вот смотрите:
Вроде все нормально. Но как только мы выберем строку и перейдем на следующий контрол:
Видите выравнивание какое неудобное? Как порешать эту проблему смотрим в далее...
Как выяснилось, данный компонент производный от 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"

Собственно все.

Комментариев нет:

Отправить комментарий