繁体   English   中英

silverlight组合框itemtemplate绑定

[英]silverlight combobox itemtemplate binding

我想在Silverlight组合框中显示图像和文本。 我在WPF中找到一个示例,其中的ItemTemplate通过图像和名称显示颜色。 在Silverlight中,相同的xml导致空行。 因此,对于每个项目,都会生成一个项目,但它不会绑定到Name属性。 Silverlight是否需要WPF以外的其他绑定?

这是示例:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        cmbColors.ItemsSource = typeof(Colors).GetProperties();
    }
}

XML格式

<UserControl x:Class="SilverlightColors.MainPage"
    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"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel >
            <ComboBox Name="cmbColors" >
                <ComboBox.ItemTemplate  >
                    <DataTemplate  >
                        <StackPanel Orientation="Horizontal">
                            <Rectangle Fill="{Binding Name}" Width="16" Height="16" Margin="0,2,5,2"/>
                            <TextBlock Text="{Binding Name}"/>
                        </StackPanel>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
        </StackPanel>
    </Grid>
</UserControl>

试图通过绑定到Color名称来设置“ Rectangle Fill ”将不起作用。 XAML做一些特殊的魔术来获取:

<Rectangle Fill="White" Width="16" Height="16" Margin="0,2,5,2"/>

上班。 因此,虽然从GetProperties()返回的PropertyInfo的“名称”属性是“黑色”,“白色”或“黄色”,但是您不能直接使用它。 您需要做的是创建一个名称和画笔的字典,为每个画笔分配不同的颜色,然后将组合框的数据源绑定到该颜色。

此代码有效:

.cs:

var list = typeof(Colors).GetProperties();
var brushes = new Dictionary<string, SolidColorBrush>();
foreach (var colour in list)
{
    brushes.Add(colour.Name, new SolidColorBrush((Color)colour.GetValue(colour, null)));
}
cmbColors.ItemsSource = brushes;

XAML:

<ComboBox Name="cmbColors"
          VerticalAlignment="Center"
          HorizontalAlignment="Center">
    <ComboBox.ItemTemplate  >
        <DataTemplate  >
            <StackPanel Orientation="Horizontal">
                <Rectangle Fill="{Binding Value}" Width="16" Height="16" Margin="0,2,5,2"/>
                <TextBlock Text="{Binding Key}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM