在Silverlight中触发ComboBox
是否有可能以不同于在DropDown列表中显示的方式显示ComboBox的选定项目(弹出关闭后)(在下拉列表中有玩家号码和名称,但在列表关闭后我只想看到它数)。
我怎样才能用一些国旗改变球员的背景?
据我所知,所有这些都可以通过触发器来完成,但它们在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>
给出一个错误:
属性'Triggers'在XML名称空间'http://schemas.microsoft.com/winfx/2006/xaml/presentation'中的类型'DataTemplate'上不存在
这里有什么问题? 这里是我的名字空间:
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"
当弹出窗口关闭不同时,似乎没有办法显示所选项目。 不过,这将是一个好主意,它需要为这个领域提供一个替代数据模板,可悲的是combox并没有这样做。 你需要基于Selector
构建你自己的实现来完成这个任务,而不是一件简单的任务。
要将布尔属性(如HasError
属性)绑定到控件上不同类型的某个其他属性(如Background
属性),请使用IValueConverter
的实现。 您可以在此博客文章中找到BoolToBrushConverter的代码。
你可以像这样使用它: -
<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
?)