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)
这可能是桌面应用程序的标准场景,但您并不是在创建桌面应用程序。您正在创建一个在安全沙箱中运行的组件,并且出于充分的理由该组件带有一些相当严格的限制。
没有巧妙的方法来处理这种情况。您可以提供关闭“文档”功能,该功能将弹出一个确认框,警告继续操作将丢失工作。
在当前未保存的情况下尝试打开另一个“文档”时,您所能做的就是显示消息,指示用户做出选择,关闭当前“文档”并放弃其更改或选择保存。用户将必须手动执行这些操作,然后再次选择打开“文档”。
如果您的应用程序支持多个“打开”文档,您可能可以稍微改进一下,至少用户不会因打开“文档”而被征税。
| 归档时间: |
|
| 查看次数: |
5415 次 |
| 最近记录: |