1

ComboBoxwithImageと を実装するコードを取得しました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)。

よろしくお願いします。

4

0 に答える 0