【发布时间】:2015-03-14 10:35:18
【问题描述】:
我在我的代码中使用 ListBox 来存储用户选择的一些 csv 文件:
<ListBox x:Name="emailsFilesListBox" HorizontalAlignment="Left" Height="67" Margin="10,254,0,0" Grid.Row="1" VerticalAlignment="Top" Width="147"/>
在 MainWindow.xaml.cs 我使用私有类来扩展 System.Windows.Controls.ListBox:
private class MyListBox : System.Windows.Controls.ListBox
{
public string[] FullFilesPathsList { get; set; }
public MyListBox() : base()
{
}
}
在 MainWindow.xaml.cs 的事件处理程序中,我有以下代码:
private void emailsAdd_Click(object sender, RoutedEventArgs e)
{
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.Multiselect = true;
dlg.Filter = "CSV Files|*.csv";
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
MyListBox myListBoxWithEmailsFiles = new MyListBox();
myListBoxWithEmailsFiles = (MyListBox)emailsFilesListBox;
myListBoxWithEmailsFiles.FullFilesPathsList = dlg.FileNames;
....................................
}
}
尝试执行转换“myListBoxWithEmailsFiles = (MyListBox)emailsFilesListBox;”导致 InvalidCastException。你能告诉我为什么会这样吗?
【问题讨论】:
-
emailsFilesListBox 是
ListBox,而不是MyListBox。每个MyListBox都是ListBox但不是相反 -
为什么在这种情况下不允许向下转换?
-
因为在 XAML 中它不是创建为
MyListBox,而是ListBox。您创建MyListBox类但不使用它 -
感谢您的回复。如果要在 XAML 中进行修改(当然,只是将标签 ListBox 更改为 MyListBox 并没有解决任何问题)以使事情正常进行,我期待您的建议。