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