Динамическая настройка цвета фона элемента управления Silverlight (список) - PullRequest
2 голосов
/ 30 сентября 2008

Как мне установить цвет фона элементов в списке динамически? то есть в моем бизнес-объекте есть свойство, которое я тоже привязываю, поэтому, основываясь на некоторых бизнес-правилах, я хочу, чтобы цвет фона был другим?

        <ListBox Background="Red">
      <ListBox.ItemContainerStyle>
          <Style TargetType="ListBoxItem">
              <Setter Property="Background" Value="Red"/>
          </Style>
      </ListBox.ItemContainerStyle>
 <ListBox.ItemTemplate>
      <DataTemplate>
                    <StackPanel Orientation="Horizontal"
                                Margin="5">
                        <TextBlock VerticalAlignment="Bottom"
                                   FontFamily="Comic Sans MS"
                                   FontSize="12"
                                   Width="70"
                                   Text="{Binding Name}" />
                        <TextBlock VerticalAlignment="Bottom"
                                   FontFamily="Comic Sans MS"
                                   FontSize="12"
                                   Width="70"
                                   Text="{Binding Age}" />
                     </StackPanel>
                </DataTemplate>
        </ListBox.ItemTemplate>
      </ListBox>

РЕДАКТИРОВАТЬ: здесь написано здесь

В Silverlight вы должны добавить x: Key атрибуты ваших пользовательских стилей и ссылаться на них как на статические ресурсы. Silverlight не поддерживает неявное стили, применяемые с использованием TargetType значение атрибута.

Влияет ли это на мой подход?

Ответы [ 4 ]

2 голосов
/ 30 сентября 2008

Хорошо - если вам нужна пользовательская логика для определения фона, я бы рассмотрел создание простого класса IValueConverter. Вам просто нужно реализовать интерфейс IValueConverter и в его методе Convert изменить предоставленное значение на Brush.

Вот краткое сообщение от Sahil Malik, которое описывает IValueConverters - это может помочь:

http://blah.winsmarts.com/2007-3-WPF__DataBinding_to_Calculated_Values--The_IValueConverter_interface.aspx

1 голос
/ 30 сентября 2008

Чтобы привязать свой фон к нескольким свойствам, вы можете использовать IMultiValueConverter. Это похоже на IValueConverter за исключением того, что он работает с MultiBinding, чтобы передавать более одного значения в класс и возвращать одно значение.

Вот сообщение, которое я нашел с прогоном на IMultiValueConverter и MultiBinding:

http://blog.paranoidferret.com/index.php/2008/07/21/wpf-tutorial-using-multibindings/

Редактировать: если IMultiValueConverter недоступен (похоже, что Silverlight имеет только IValueConverter), вы всегда можете передать весь связанный объект (например, ваш объект Person) в IValueConverter и использовать различные свойства из этого для возврата кисти. 1008 *

0 голосов
/ 14 июля 2009

Вы можете попробовать связать что-то в вашей шаблоне управления (то есть границу или что-то) с TemplateBackground. Затем установите фон в списке, чтобы определить его цвет.

<Border Margin="-2,-2,-2,0" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,1,1,0" CornerRadius="11,11,0,0">
0 голосов
/ 30 сентября 2008

@ Мэтт Спасибо за ответ. Я посмотрю на триггеры.

Моя единственная проблема в том, что логика определения того, должна ли быть окрашена строка, немного сложнее, поэтому я не могу просто проверить свойство, поэтому мне действительно нужно запустить некоторую логику для определения цвета. Есть идеи?

Полагаю, я мог бы создать объект пользовательского интерфейса со всеми соответствующими полями, которые мне нужны, но я вроде не хотел подходить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...