2015-10-25 42 views
0

我有一個ComboBox下以下(這意味着我不能使用任何因參數x:Name重複命名)的約20:訪問無名控制背後

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

哪有我訪問事件中的TextBlock字符串?

目前,當我選擇正常的項目,選定的文本(我ComboBox的)設置爲

System.Windows.Controls.ComboBoxItem

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

如何更改基於ComboBoxItem的我的xaml的退貨類型?

+0

當你從XAML填充該組合時,你可以使用'x:Name'。會有什麼問題? –

+0

@HenkHolterman如果我使用'x:Name =「txt」'作爲'comboBox.SelectedItem = txt.Text;'從後面訪問它,這將適用於第一項,但所有其他項將失敗,因爲**重複命名**(只有一個'TextBlock'可以命名爲'txt' - > **不起作用** – cramopy

+0

'txt1' ...'txt2' ...'txt3' ... – MickyD

回答

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> 

現在它就像一個魅力,並做我想要的東西。