如何在silverlight中使用openfiledialog

时间:2014-09-11 10:47:21

标签: c# silverlight

我想用openfiledialog选择一个图像但是有一个错误,'对话必须是用户启动的。'

按钮点击活动

OpenFileDialog fdialog = new OpenFileDialog();
bool? IsSelected = fdialog.ShowDialog();
 fdialog.Filter = "Pictures (*.png)|*.png";
if (IsSelected == true)
{
    BitmapImage bitImage = new BitmapImage();
    bitImage.SetSource(fdialog.File.OpenRead());
    imgKisi.Source = bitImage;
}

1 个答案:

答案 0 :(得分:0)

这是Silverlight安全限制。

基本上,您必须直接打开SaveFileDialog或OpenFileDialog以响应由用户操作(例如Click)引起的事件,该事件仅在主线程上引发。因此,您无法以常规方法从用户代码中打开这些对话框,因为用户代码在逻辑线程上执行,即

1)不是主线程,而

2)不一定是为了响应用户操作引起的事件而执行的。

您基本上有两种方法可以解决安全限制:

创建自定义控件并打开对话框以响应用户事件(例如,单击按钮)。这就是excel导入器和办公室集成包扩展的工作方式。 在按钮控件上使用FindControl方法,并在控件可用事件中为按钮订阅click事件处理程序。在click事件处理程序中编写对话框代码。 我不确定DevExpress扩展是如何做到的,但我的猜测是他们使用第一种方法(他们创建了一些UI,并为打开对话框的UI提供了事件处理程序)。

查看此for a workaround