我检索了一个实施ComboBox
Image
和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
与代码behing中的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));
}
我的问题如下:
我不明白依赖属性在做什么。显然我需要将信息传递给子图像和textBlock控件,但我不知道如何。我知道datacontext已经通过ItemSource绑定传递。
我的第二个问题是关于数据表。列名称的属性类似于#@?!机制?似乎wpf甚至在隐藏的代码后面做了隐藏的事情。没有人在谈论这个问题,这对我来说似乎很奇怪和令人沮丧。
如何修改此代码以将我想要分别用作数据表中的列名作为变量传递给选择字段和显示。目前,它们在Xaml(country_code_iso_2和country_name)中进行了硬编码。
非常感谢提前。