在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 ?)

    链接地址: http://www.djcxy.com/p/34539.html

    上一篇: Trigger for ComboBox in Silverlight

    下一篇: Silverlight 3 ValidatesOnException not found