任何绕过"对话必须是用户启动的"例外的方法?

use*_*625 11 c# silverlight openfiledialog savefiledialog

我的应用程序有一个"打开文件"按钮.在启动OpenFileDialog之前,它会询问用户是否要保存当前文件,如果是,则启动SaveFileDialog.然后它启动OpenFileDialog.很标准的东西.

我的问题是Silverlight然后看到OpenFileDialog.ShowDialog()方法不是用户启动的,我得到一个SecurityException.

是否有任何已知的合理方法可以避免此异常?当然这是一个非常标准的场景?

该应用程序位于浏览器中.

欢迎任何想法

编辑:

对不起,不允许发布实际代码:(逻辑非常简单:在伪造的代码中,'OpenFile'按钮按下事件调用一个方法,如:

*发出新的SL消息,询问是否先保存.

*在消息窗口中是/否单击: - 如果否,转到加载 - 如果是,则启动SaveFileDialog.ShowDialog(),转到加载

*加载:启动打开文件对话框

编辑2:迷你程序......

主页的XML内容:

<Grid x:Name="LayoutRoot" Background="White">
    <Button Content="Open" Click="Button_Click"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

码:

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;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*nes 3

这可能是桌面应用程序的标准场景,但您并不是在创建桌面应用程序。您正在创建一个在安全沙箱中运行的组件,并且出于充分的理由该组件带有一些相当严格的限制。

没有巧妙的方法来处理这种情况。您可以提供关闭“文档”功能,该功能将弹出一个确认框,警告继续操作将丢失工作。

在当前未保存的情况下尝试打开另一个“文档”时,您所能做的就是显示消息,指示用户做出选择,关闭当前“文档”并放弃其更改或选择保存。用户将必须手动执行这些操作,然后再次选择打开“文档”。

如果您的应用程序支持多个“打开”文档,您可能可以稍微改进一下,至少用户不会因打开“文档”而被征税。