欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WPF PrismDialog PopupWindowAction使用MetroWindow

程序员文章站 2022-04-08 17:18:12
本示例必须在prism5.0版本以上 PopupWindowAction如何使用MetroWindow? public class Window1ViewModel:BindableBase,IInteractionRequestAware { #region Properties private ......

本示例必须在prism5.0版本以上

popupwindowaction如何使用metrowindow?

 

public class window1viewmodel:bindablebase,iinteractionrequestaware
    {
        #region properties
        private string str;

        public string str
        {
            get { return str; }
            set { setproperty(ref str, value); }
        }

        #endregion

        /// <summary>
        /// cancel
        /// </summary>
        private delegatecommand<window> clickcommand;

        public delegatecommand<window> clickcommand
        {
            get
            {
                if (clickcommand == null)
                    clickcommand = new delegatecommand<window>(click);
                return clickcommand;
            }
        }

        private inotification  notification;

        public inotification notification
        {
            get { return notification; }
            set { setproperty(ref notification,value); }
        }

        public action finishinteraction { get; set; }

        private void click(window window)
        {
            var _notification = (window1dialogmodel)notification;
            _notification.str = this.str;
            _notification.confirmed = true;
            finishinteraction?.invoke();
        }
    }

 

  public class window1dialogmodel : iconfirmation
    {
        public string str { get; set; }

        //interface content
        public bool confirmed { get ; set ; }
        public string title { get ; set ; }
        public object content { get; set; }
    }

 

<usercontrol x:class="pfu.scansnap.home.ui.sshuiuserdata.views.window1"
                           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                           xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
                           xmlns:metrocontrols="clr-namespace:mahapps.metro.controls;assembly=mahapps.metro"
                           xmlns:prism="http://www.codeplex.com/prism"
                           xmlns:prop="clr-namespace:pfu.scansnap.home.ui.sshuiuserdata.properties"
                           xmlns:util ="clr-namespace:pfu.scansnap.home.ui.sshuiuserdata.util"
                           prism:viewmodellocator.autowireviewmodel="true"
                           mc:ignorable="d"
                           borderbrush="#ff666666"
                           borderthickness="1"
                           width="500" height="300">
    <usercontrol.resources>
        <resourcedictionary>
            <resourcedictionary.mergeddictionaries>
                <resourcedictionary  source="/sshuiuserdata;component/styles/resourcedictionary.xaml"/>
                <resourcedictionary  source="/sshuiuserdata;component/styles/basestyles.xaml" />

                <resourcedictionary source="pack://application:,,,/mahapps.metro;component/styles/controls.buttons.xaml" />
                <resourcedictionary source="pack://application:,,,/mahapps.metro;component/styles/colors.xaml" />
            </resourcedictionary.mergeddictionaries>
        </resourcedictionary>
    </usercontrol.resources>

    <grid>
        <stackpanel orientation="vertical" verticalalignment="center">
            <textbox text="{binding str}"/>
            <button content="click" command="{binding clickcommand}" commandparameter="{binding elementname=_window1_}"/>
        </stackpanel>
    </grid>
</usercontrol>

 

// 核心块

 public class metropopupwindowaction:popupwindowaction
    {
        protected override window createwindow()
        {
            return new messagedialogwindow();
        }
    }

 

<!--window1 dialog-->
        <prism:interactionrequesttrigger sourceobject="{binding window1dialogrequest}">
            <util:metropopupwindowaction ismodal="true" centeroverassociatedobject="true">
                <util:metropopupwindowaction.windowcontent>                   
                    <local:window1/>
                </util:metropopupwindowaction.windowcontent>
            </util:metropopupwindowaction>
        </prism:interactionrequesttrigger>

 

private void ok()
        {
            window1dialogrequest.raise(new window1dialogmodel { str = $"6666", title = "window1" }, _ =>
            {
                messagebox.show(_.str);
            });
        }
        #endregion

        #region notificationrequest
        public interactionrequest<window1dialogmodel> window1dialogrequest { get; set; }
        #endregion

        public exportmainwindowviewmodel()
        {
            window1dialogrequest = new interactionrequest<window1dialogmodel>();
        }