我想在Silverlight ComboBox中显示图像和文本。我在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>
答案 0 :(得分:0)
尝试通过绑定Fill
的名称来设置Rectangle
的{{1}}将不起作用。 XAML做了一些特别的魔术:
Color
上班。因此,当从GetProperties()返回的<Rectangle Fill="White" Width="16" Height="16" Margin="0,2,5,2"/>
的“名称”属性为“黑色”,“白色”或“黄色”时,您无法直接使用它。您需要做的是创建一个名称和画笔字典,并为每个字符分配不同的颜色,然后将组合框的DataSource绑定到该字典。
此代码有效:
的.cs:
PropertyInfo
XAML:
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;