在Silverlight中触发ComboBox

时间:2010-05-29 22:05:25

标签: silverlight combobox triggers silverlight-4.0

  1. 是否有可能以不同于DropDown List中显示的方式显示ComboBox的选定项目(弹出窗口关闭后)(下拉列表中有玩家编号和名称,但是在列表关闭后)我想只看到它的号码。

  2. 如何使用某些标志更改播放器的背景?

  3. 据我所知,所有这些都可以通过触发器完成,但它们是否支持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"
    

1 个答案:

答案 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?)