在WPF中有<prism:popupwindowacion>的替代方法</prism:popupwindowacion>

时间:2013-06-26 06:28:09

标签: wpf silverlight prism prism-4

在WPF中是否有任何替代选项,此标记的性质是在执行任何特定操作之前启用确认对话框。

这个标签在silverlight支持下,但遗憾的是它似乎在WPF下丢失了。不确定这个Prism团队是否意外地错过了什么。上述标签的最佳替代方案是什么?

1 个答案:

答案 0 :(得分:1)

你基本上必须创建自己的。但是,有一个例子,我发现之前我找到了一个人。我修改了Prism的交互类很多,所以我的ModalPopupAction可能与你需要的有点不同。所以请查看此链接并下载他的示例。它有WPF的实现!

Prism: InteractionRequest and PopupModalWindowAction for WPF applications

如果你想知道......我的ModalPopupAction看起来像这样(但它需要我的其他一些类)

public class ModalPopupAction : TriggerAction<FrameworkElement>
{
    public UserControl InteractionView
    {
        get { return (UserControl)GetValue(InteractionViewProperty); }
        set { SetValue(InteractionViewProperty, value); }
    }

    // Using a DependencyProperty as the backing store for PopupDialog.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty InteractionViewProperty =
        DependencyProperty.Register("InteractionView", typeof(UserControl), typeof(ModalPopupAction), new UIPropertyMetadata(null));

    protected override void Invoke(object parameter)
    {
        InteractionRequestedEventArgs args = parameter as InteractionRequestedEventArgs;

        if (args == null)
            return;

        // create the window
        ModalPopupDialog dialog = new ModalPopupDialog();
        dialog.Content = InteractionView;

        // set the data context
        dialog.DataContext = args.Interaction;

        // handle finished event
        EventHandler handler = null;
        handler = (o, e) =>
        {
            dialog.Close();
            args.Callback();
        };
        args.Interaction.Finished += handler;

        // center window
        DependencyObject current = AssociatedObject;
        while (current != null)
        {
            if (current is Window)
                break;
            current = LogicalTreeHelper.GetParent(current);
        }
        if (current != null)
            dialog.Owner = (current as Window);

        dialog.ShowDialog();
        dialog.Content = null;
        dialog.DataContext = null;
        args.Interaction.Finished -= handler;
    }
}