Динамически настраивать текст TextBlock Text в ListBox - PullRequest
0 голосов
/ 04 апреля 2011

У меня есть ListBox с пользовательским шаблоном данных следующим образом:

<ListBox>
     <ListBox.ItemTemplate>
          <DataTemplate>
               <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Value}" />
               </StackPanel>
          </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>

Я хотел бы настроить содержимое TextBlock на основе значения другого элемента управления на странице, который используется для фильтрации элементов в ListBox. Таким образом, если в элементе управления фильтра есть текст «Hello», это элемент списка с текстом «Hello World!» будет выглядеть как Hello world! (с «Hello» выделено жирным шрифтом).

Я не уверен, где подключить этот тип пользовательского форматирования. Я думал об использовании Конвертера, но они поддерживают только один параметр, и многозначные преобразователи в Silverlight 4 все еще не используются. Я думал о событии, где я мог бы перебирать элементы, но ни один из них не присутствует в ListBox или в Уровень предмета. Я видел эту опцию , но мне интересно, нет ли более простого решения этой проблемы.

ОБНОВЛЕНИЕ: Это даже усложняет тот факт, что мне нужно будет использовать несколько блоков RUN, так как совпадения могут происходить в нескольких местах в строке. Например. Привет мир Привет будет два матча.

1 Ответ

1 голос
/ 04 апреля 2011

Я думаю, что вы можете сделать это с помощью конвертера.Вы бы просто передали значение текстового поля фильтра в ConverterParameter.Ваша привязка будет выглядеть примерно так:

<TextBlock Text="{Binding Value, Converter={StaticResource YourConverterName}, ConverterParameter={ElementName=FilterTextBox, Path=Text}}" />

Метод Convert для справки:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

На этом этапе в вашем методе Convert вы получите текст TextBlock череззначение параметра и текст фильтра TextBox через параметр «параметр».

...