Как обойти исключение «Диалоги должны инициироваться пользователем»?

В моем приложении есть кнопка «открыть файл». Перед запуском 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>

Код :

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;
    }
}
}
11
задан user495625 4 November 2011 в 11:30
поделиться