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 バインディングを通過していることを理解しています。
2 番目の質問は、データテーブルに関するものです。列名はプロパティのように使用されます。機構?wpf はコード ビハインドでも隠れた処理を行っているようです。誰もこれについて話していませんが、私には非常に奇妙でイライラしているように思えます.
このコードを変更して、それぞれ選択フィールドと表示として使用するデータテーブルの列名を変数として渡すにはどうすればよいですか。現在、これらは Xaml でハードコードされています (country_code_iso_2 および country_name)。
よろしくお願いします。