最近项目要用wpf做,没接触过.net的c++程序员,只好开始学习wpf了。
首先,确定你的listbox的item是什么类型:
1)文本类型
一般是通过如下简单代码添加的item:
listBox.Items.Add("text"); // item直接是文本
那么,获取选择文本可以如下:
string selectedText = (sender as ListBox).SelectedItem.ToString();
2)用属性里面的集合类型(通过属性面板添加的属性)
用msdn上的方式即可得到选择文本:
msdn代码如下:
void PrintText(object sender, SelectionChangedEventArgs args)
{
ListBoxItem lbi = ((sender as ListBox).SelectedItem as ListBoxItem);
tb.Text = " You selected " + lbi.Content.ToString() + ".";
}
虽然msdn上说,如果是单选模式,用SelectedItem;多选用SelectedItems。但是我还是喜欢下面的,单选多选通用。
foreach (ListBoxItem lbi in listBox.SelectedItems)
{
if (lbi != null)
{
string str = lbi.Content.ToString();
}
}
你可以看到,用属性面板里面的“集合”添加的item,是ListBoxItem 类型,(sender as ListBox).SelectedItem 也就是这个类型。你要取它的Content属性值,这个才是显示的值。所以用代码:((sender as ListBox).SelectedItem as ListBoxItem).Content.ToString(); 得到显示的文本内容。
3)绑定的表datatable
因为你绑定的数据是表,所以你的选择项是DataRow类型,要如下操作即可:
DataRowView dr = ListBox.SelectedItem as DataRowView;
string selectedText = dr["字段"].ToString();
4)如果你绑定数据是自定义的集合类型:
自定义数据类型
namespace XXX
{
// 注意,需要绑定控件item并显示的成员,请用属性,不要用公有变量,否则,绑定数据时,将显示空白(我在.net3.5下是这样)
public class XXXInfo
{
public XXXInfo()
{
appDatabase = new ObservableCollection<string>();
}
public string name
{
get;
set;
}
public string path
{
get;
set;
}
}
public class XXXInfos
{
public XXXInfos()
{
XXXInfoList = new ObservableCollection<XXXInfos>();
}
public ObservableCollection<XXXInfos> XXXInfoList
{
get;
set;
}
}
}
// xaml文件
<ListBox Grid.Row="2" Margin="10,10,10,10" Name="listBoxXXX" MouseDoubleClick="listBoxXXX_MouseDoubleClick" ItemsSource="{Binding Path=XXXInfoList }" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
//
指定DataContext :这里简单用代码了。有时可以共享父控件的
listBoxXXX.DataContext = XXXInfos;
那么你的SelectItem就是:
XXXInfo selected = (sender as ListBox).SelectedItem as XXXInfo ;
然后,取你自己想要的东西吧
5)其他,举一反三即可
ComboBox,及其他很多都很类似,自己领悟吧。