我的应用程序有一个“打开文件”按钮。在启动OpenFileDialog之前,它会询问用户是否想要保存当前文件,如果是,则启动SaveFileDialog。然后它启动OpenFileDialog。这是非常标准的。
我的问题是Silverlight随后将OpenFileDialog.ShowDialog()方法视为非用户启动,因此我会收到SecurityException。
是否有任何已知的合理方法可以避免此异常?这肯定是一个非常标准的情况吧?
该应用程序位于浏览器中。
欢迎任何想法
编辑:
抱歉,不允许发布实际代码 :( 但逻辑非常简单:在伪代码中,“打开文件”按钮按下事件调用类似以下的方法:
*启动新的SL消息询问是否首先保存。
*在消息窗口上单击是/否: - 如果是No,则转到Load。 - 如果是Yes,则启动SaveFileDialog.ShowDialog(),然后转到Load。
*Load: 启动打开文件对话框
编辑2: 小程序...
主页的XML内容:
<Grid x:Name="LayoutRoot" Background="White">
<Button Content="Open" Click="Button_Click"/>
</Grid>
代码:
using System.Windows;
using System.Windows.Controls;
namespace SilverlightApplication15
{
public partial class MainPage : UserControl
{
AskWindow aw = new AskWindow();
public MainPage()
{
InitializeComponent();
aw.Closed += new System.EventHandler(aw_Closed);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
aw.Show();
}
private void aw_Closed(object sender, System.EventArgs e)
{
if (aw.DialogResult == true)
{
SaveFileDialog svd = new SaveFileDialog();
svd.ShowDialog();
}
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();//Causes security exception
}
}
public class AskWindow : ChildWindow
{
public AskWindow()
{
Button b = new System.Windows.Controls.Button();
b.Click += new System.Windows.RoutedEventHandler(b_Click);
b.Content = "Yes, save it";
this.Content = b;
}
private void b_Click(object sender, System.Windows.RoutedEventArgs e)
{
this.DialogResult = true;
}
}
}