是否有可能以不同于DropDown List中显示的方式显示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>
给出错误:
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"
答案 0 :(得分:1)
当弹出窗口以不同方式关闭时,似乎没有办法显示所选项目。但是,这将是一个好主意,它需要为该区域提供替代数据模板,遗憾的是combox不会这样做。您需要基于Selector
构建自己的实现来执行此操作,而不是一项简单的任务。
要将诸如HasError
属性之类的布尔属性绑定到控件上的其他类型的其他属性(例如Background
属性),请使用IValueConverter
的实现。您可以在此blog文章中找到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
?)