从后面的代码访问xaml中的未命名控件

时间:2015-10-25 15:23:52

标签: c# wpf xaml combobox

我在ComboBox下面有大约20个以下内容(这意味着由于重复命名,我无法使用任何x:Name参数):

<ComboBoxItem>
    <StackPanel Orientation="Horizontal">
        <Image Source="folder/someimage.png" Height="20" Width="20"/>
        <TextBlock Text="SampleText" Margin="5,0,0,0"/>
    </StackPanel>
</ComboBoxItem>

如何从TextBlock事件中的SelcetionChanged访问字符串?

目前,当我正常选择项目时,所选文本(我的ComboBox)设置为

  

System.Windows.Controls.ComboBoxItem

这是ComboBoxItem.ToString()方法的返回值!

如何更改基于xaml的{​​{1}}的返回类型?

1 个答案:

答案 0 :(得分:0)

经过长时间的研究,我找到了解决方案。我创建了一个新的UserControl,然后将其添加为我ComboBox的项目。

<强> MyComboBoxItem.xaml:

<StackPanel Orientation="Horizontal">
    <Image x:Name="img" Source="{Binding Image, ElementName=myComboBoxItem}" Height="18" Width="18"/>
    <TextBlock x:Name="txt" Text="{Binding Text, ElementName=myComboBoxItem}" Margin="5,0,0,0"/>
</StackPanel>

<强> MyComboBoxItem.xaml.cs:

public string Text
{
    get { return txt.Text; }
    set { txt.Text = value; }
}

public override string ToString()
{
    return Text;
}

<强> MainWindow.xaml:

<ComboBox>
    <local:MyComboBoxItem Image="image1.png" Text="Item1"/>
    <local:MyComboBoxItem Image="image2.png" Text="Item2"/>
    <local:MyComboBoxItem Image="image3.png" Text="Item3"/>
</ComboBox>

现在它就像一个魅力,完全符合我的想法。