【问题标题】:Trigger for ComboBox in SilverlightSilverlight 中组合框的触发器
【发布时间】:2010-05-29 22:05:25
【问题描述】:
  1. 是否有可能以不同于下拉列表中显示的方式显示组合框的选定项目(弹出关闭后)(下拉列表中有玩家编号和名称,但列表关闭后)我只想看它的编号)。

  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>

给出一个错误:

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"

【问题讨论】:

  • silverlight 中不存在数据触发器
  • 有什么解决方法吗?

标签: silverlight combobox triggers silverlight-4.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?)

【讨论】:

  • WrapPanel - 没关系,但你是对的。感谢转换器的提示。关于不同的显示:您知道是否有任何 3rd 方工具包(如 Infragistics 或 Telerik)具有此类行为的控件?再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多