我检索了一个实现ComboBox
withImage
和的代码Text
。我设法使它工作,但不知道为什么。如果一个慈善的灵魂能解释我,我会很感激,那里发生了什么!这是代码,在XAML
我有:
<UserControl x:Class="DiagramDesigner.App_UserControls.RichComboBox.RichComboBox" Name="ucRichCombo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:Convert="clr-namespace:DiagramDesigner.App_UserControls.RichComboBox.ComboImageConverter"
mc:Ignorable="d"
Height="Auto" Width="Auto">
<UserControl.Resources>
<Convert:ComboImageConverter x:Key="Converters" />
</UserControl.Resources>
<Grid>
<ComboBox Name="cbRichCombo" ItemsSource="{Binding ElementName=ucRichCombo, Path=ComboDataTable}" SelectedValuePath="country_code_iso_2" SelectedValue="{Binding ElementName=ucRichCombo, Path=country_code_iso_2}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Name="spComboItem" MinWidth="150">
<Image Name="iComboItem" Width="20" Height="20" Margin="1,0,3,0" Source="{Binding Path=country_code_iso_2, ConverterParameter='COMBOFLAGS', Converter={StaticResource Converters}}"/>
<TextBlock Name="tComboItem" Margin="2,0,2,0" Text="{Binding country_name}" Width="Auto" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
ComboDataTable
与代码中的DataTable
相关联,comboBox
如下所示:
public partial class RichComboBox : UserControl
{
public RichComboBox()
{
InitializeComponent();
}
public DataTable ComboDataTable
{
get { return (DataTable)GetValue(ComboDataTableProperty); }
set { SetValue(ComboDataTableProperty, value); }
}
public static readonly DependencyProperty ComboDataTableProperty =
DependencyProperty.Register("ComboDataTable", typeof(DataTable), typeof(RichComboBox), new UIPropertyMetadata(null));
}
我的问题如下:
我不明白依赖属性在做什么。显然它是需要的,我猜想将信息传递给子 Image 和 textBlock 控件,但我不知道如何。我了解数据上下文已经通过 ItemSource 绑定传递。
我的第二个问题是关于数据表的。列名用作属性,#@?! 机制?似乎 wpf 甚至在背后的代码后面都在做隐藏的事情。没有人在谈论这个,这对我来说似乎很奇怪和令人沮丧。
如何修改此代码以将我想分别用作选择字段和显示的数据表中的列名作为变量传递。目前,它们在 Xaml 中硬编码(country_code_iso_2 和 country_name)。
提前谢谢了。