2010-05-29 4 views
1
  1. Есть ли возможность отображения выбранного элемента в ComboBox (после всплывающего закрытия) таким образом, отличается от его отображения в выпадающем списке (Есть количество игроков и имя в списке , но после закрытия списка я хочу видеть только его число).Trigger для ComboBox в Silverlight

  2. Как изменить фон для игрока с помощью какого-либо флага?

Насколько я знаю, все, что можно сделать с помощью триггеров, но они поддерживаются в Silverlight 4, VS2010, Silverlight Toolkit 4? В моем случае следующий код

 <ComboBox ItemsSource="{Binding PlayersAll}" 
        SelectedItem="{Binding Path=SelectedPlayer, Mode=TwoWay}" 
        > 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <ToolkitControls:WrapPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding TeamNumber}"/> 
         <TextBlock Text=" - "/> 
         <TextBlock Text="{Binding ShortName}"/> 
        </ToolkitControls:WrapPanel> 
        <DataTemplate.Triggers> 
         <Trigger Property="HasError" Value="True"> 
          <Setter Property="Background" TargetName="FlagSet" Value="Red"/> 
         </Trigger> 
        </DataTemplate.Triggers> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 

выдает ошибку:

The property 'Triggers' does not exist on the type 'DataTemplate' in the XML namespace ' http://schemas.microsoft.com/winfx/2006/xaml/presentation '

, что здесь не так? Вот мои пространства имен:

 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
     xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" 
     xmlns:ToolkitControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit" 
+0

Триггеры данных не существуют в silverlight –

+0

Есть ли обходной путь для этого? – Budda

ответ

1

Невозможно отобразить выбранный элемент, если всплывающее окно закрыто по-разному. Было бы неплохо, но для этого потребовалось бы создать альтернативный шаблон данных, к сожалению, combox этого не делает. Для этого вам нужно создать собственную реализацию на основе Selector, а не тривиальную задачу.

Чтобы связать логическое свойство, например, ваш HasError собственности какой-либо другой собственности другого типа на элемент управления (например, Background собственности) использовать реализацию IValueConverter. Вы можете найти код для BoolToBrushConverter в этой статье blog.

Вы можете использовать это что-то вроде этого: -

<UserControl.Resources> 
    <local:BoolToBrushConverter x:Key="FlagToBrush" TrueValue="Red" FalseValue="Transparent"/> 
</UserControl.Resources> 

Теперь предположим, вы имеете в виду, чтобы изменить цвет фона элементов, отображаемых в выпадающем списке: -

  <DataTemplate> 
       <ToolkitControls:WrapPanel Orientation="Horizontal" 
        Background="{Binding HasError, Converter={StaticResource FlagToBrush}}> 
        <TextBlock Text="{Binding TeamNumber}"/> 
        <TextBlock Text=" - "/> 
        <TextBlock Text="{Binding ShortName}"/> 
       </ToolkitControls:WrapPanel> 
      </DataTemplate> 

(кстати, почему WrapPanel вместо простого StackPanel?)

+0

WrapPanel - это не имеет значения, но вы правы. Спасибо за подсказку с конвертером. Annd о разных показах: знаете ли вы, есть ли у каких-либо сторонних инструментариев (например, Infragistics или Telerik) элементы управления с таким поведением? Еще раз спасибо. – Budda

Смежные вопросы