Prism框架自定义弹出提示窗

这篇具有很好参考价值的文章主要介绍了Prism框架自定义弹出提示窗。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自定义界面如下:

prism 弹窗,Prism MVVM,WPF,microsoft

 

1、App.xaml.cs

protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //注册对话服务
            containerRegistry.RegisterSingleton<IDialogService, DialogService>();
            containerRegistry.RegisterDialog<MotionLoadView, MotionLoadViewModel>();
            containerRegistry.RegisterDialog<WarningMsgView, WarningMsgViewModel>("warning");
            containerRegistry.RegisterDialog<InfoMsgView, InfoMsgViewModel>("info");
            containerRegistry.RegisterDialog<ErrorMsgView, ErrorMsgViewModel>("error");
            containerRegistry.RegisterDialog<InfoToastView, InfoToastViewModel>("toastInfo");
        }

2、弹出界面布局xaml

<UserControl
  x:Class="Views.Pages.IDialogs.MsgView.WarningMsgView"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:YOUI="clr-namespace:MotionWindows.Styles.Control"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:local="clr-namespace:Views.Pages.IDialogs.MsgView"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:prism="http://prismlibrary.com/"
  Width="400"
  Height="200"
  prism:ViewModelLocator.AutoWireViewModel="True"
  Background="{DynamicResource SecundaryBackgroundColor}"
  MouseMove="MsgView_MouseMove"
  mc:Ignorable="d">

  <prism:Dialog.WindowStyle>
    <Style TargetType="Window">
      <Setter Property="Width" Value="400" />
      <Setter Property="Height" Value="200" />
      <Setter Property="ResizeMode" Value="NoResize" />
      <Setter Property="WindowStyle" Value="None" />
      <Setter Property="WindowState" Value="Normal" />
      <Setter Property="WindowChrome.CornerRadius" Value="5" />
      <Setter Property="Topmost" Value="True" />
      <Setter Property="ShowInTaskbar" Value="False" />
      <Setter Property="WindowChrome.GlassFrameThickness" Value="-1" />
      <Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
    </Style>
  </prism:Dialog.WindowStyle>

  <Grid>

    <Grid.RowDefinitions>
      <RowDefinition Height="40" />
      <RowDefinition />
      <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <DockPanel Grid.Row="0" VerticalAlignment="Center">

      <TextBlock
        Margin="18,0,0,0"
        HorizontalAlignment="Left"
        FontSize="16"
        FontWeight="Bold"
        Foreground="{DynamicResource TextSecundaryColor}"
        Text="{Binding Title}" />


      <Button
        HorizontalAlignment="Right"
        VerticalAlignment="Center"
        HorizontalContentAlignment="Right"
        Command="{Binding CancelCommand}"
        Content="&#xed23;"
        Cursor="Hand"
        Style="{DynamicResource MouseOverButton}"
        Tag="IsBtnClose" />

    </DockPanel>

    <StackPanel
      Grid.Row="1"
      VerticalAlignment="Center"
      Orientation="Horizontal">

      <TextBlock
        Margin="18,5,5,5"
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        FontFamily="{DynamicResource iconfont}"
        FontSize="48"
        FontWeight="Bold"
        Foreground="{DynamicResource PrimaryYellowColor}"
        Text="&#xeb6c;" />

      <TextBlock
        Margin="15,0,0,0"
        HorizontalAlignment="Left"
        VerticalAlignment="Center"
        FontSize="16"
        Foreground="{DynamicResource TextPrimaryColor}"
        Text="{Binding Content}" />
        </StackPanel>


        <StackPanel
        Grid.Row="2"
        HorizontalAlignment="Right"
        Orientation="Horizontal">

        <YOUI:UButton
        x:Name="btn1"
        Width="80"
        Height="35"
        Margin="0,20,0,5"
        Background="{DynamicResource PrimaryBlueColor}"
        BorderBrush="{DynamicResource PrimaryBlueColor}"
        Command="{Binding ConfirmCommand}"
        Content="确定"
        Cursor="Hand"
        Foreground="White" />

        <YOUI:UButton
        x:Name="btn2"
        Width="80"
        Height="35"
        Margin="20,20,15,5"
        Background="{DynamicResource PrimaryGreen}"
        BorderBrush="{DynamicResource PrimaryGreen}"
        Command="{Binding CancelCommand}"
        Content="取消"
        Cursor="Hand"
        Foreground="White" />
        </StackPanel>
        </Grid>
        </UserControl>

3 、弹窗model 引用IDialogAware 接口

public class WarningMsgViewModel : NewBindableBase, IDialogAware
{

private string title = "警告信息标题";

public string Title
{
get { return title; }
set { title = value; BeginInvokeRaisePropertyChanged(); }
}

private string content = "信息内容";

public event Action<IDialogResult> RequestClose;

public string Content
{
get { return content; }
set { content = value; BeginInvokeRaisePropertyChanged(); }
}


private bool isOpenMask = false;

public bool IsOpenMask
{
get { return isOpenMask; }
set { isOpenMask = value; BeginInvokeRaisePropertyChanged(); }
}


public DelegateCommand ConfirmCommand { get; set; }
public DelegateCommand CancelCommand { get; set; }

public WarningMsgViewModel()
{
ConfirmCommand = new DelegateCommand(Ok);
CancelCommand = new DelegateCommand(Cancel);
}

private void Cancel()
{
OnDialogClosed();
}

private void Ok()
{
IsClosedMask();
DialogParameters param = new DialogParameters();
param.Add("resultMsg", "ok");
RequestClose?.Invoke(new DialogResult(ButtonResult.OK, param));
}

public void IsClosedMask()
{

if (IsOpenMask)
{
DialogsEx.DialogMask(false);
}
}

public bool CanCloseDialog()
{

return true;
}

public void OnDialogClosed()
{
IsClosedMask();
DialogParameters param = new DialogParameters();
param.Add("resultMsg", "no");
RequestClose?.Invoke(new DialogResult(ButtonResult.No, param));
}


public void OnDialogOpened(IDialogParameters parameters)
{

if (parameters.ContainsKey("IsOpenMask"))
IsOpenMask = parameters.GetValue<bool>("IsOpenMask");

if (IsOpenMask == true)
{
DialogsEx.DialogMask(true);
}

if (parameters.ContainsKey("Title"))
Title = parameters.GetValue<string>("Title");

if (parameters.ContainsKey("Content"))
Content = parameters.GetValue<string>("Content");
}
}

4、调用

private async void WindowCloseAsync()
        {
            var dialogs = await DialogsEx.AlertBOXAsync(_dialogService, "warning", "系统提示", "是否要退出软件...", true);
            if (dialogs.Result == ButtonResult.OK)
            {
                Environment.Exit(0);
            }
        }

总结:其中要注意的是请先理解prism框架 IDialogService 服务和IDialogAware接口的使用

附上:prism框架的示例Demo

github.com/PrismLibrary/Prism-Samples-Wpf文章来源地址https://www.toymoban.com/news/detail-585878.html

到了这里,关于Prism框架自定义弹出提示窗的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 简介WPF的Prism框架

            Prism是一个用于在 WPF、Xamarin Form、Uno 平台和 WinUI 中构建松散耦合、可维护和可测试的 XAML 应用程序框架。         Prism是一个用于在WPF、Xamarin Forms、Uno Platform和WinUI中构建松耦合、可维护和可测试的XAML应用程序的框架。 每个平台都有独立的版本,它们将按照

    2024年02月05日
    浏览(48)
  • WPF框架Prism的使用 二

    这是第二篇关于Prism-WPF的介绍,第一篇中我们简单介绍了Prism,然后讲述了如何搭建一个MVVM的简单页面程序。其实我写的文章就是把github上面的官方例子摘出来自己跑了一遍,然后加上了一些自己的理解,简单给大家分享一下。 下面放上传送门: 第一篇的链接 官方提供的示

    2024年04月10日
    浏览(46)
  • WPF超好用的框架Prism入门使用,上位机赶紧学起来!

    WPF框架Prism是一种用于开发模块化、可重用和可测试的WPF应用程序的框架。它提供了一种简单而强大的方式来管理复杂应用程序的代码和构建高度可扩展的应用程序。 如果您想使用Prism框架来开发WPF应用程序,需要学习以下几个方面: MVVM模式 :Prism基于MVVM模式,因此需要了

    2024年02月01日
    浏览(39)
  • 基于Prism框架的WPF前端框架开发《知产代理数字化解决方案》

    最近新开发了一套WPF前端界面框架,叫《知产代理数字化解决方案》,采用了时下流行的Prism框架作为整个系统的基础架构,演示了Prism中的IRegionManager区域管理器、IDialogAware对话框、IDialogService对话框服务、IContainerExtension容器等用法。 系统对常用的控件进行了模板和样式开发

    2024年01月19日
    浏览(59)
  • Nlog&Prism&WPF

    介绍了为WPF框架Prism注册Nlog日志服务的方法 无论是在WPF或者ASP.NET Core当中, 都可以使用ServiceCollection来做到着一点, 因为日志框架都提供了IServiceCollection的扩展。 但是, 如果现在你使用的是Prism 8.0的应用程序, Prism提供了多种容器的支持, 例如:DryIoc或者Unity, 这个时候我们如果现

    2024年02月07日
    浏览(55)
  • WPF Prism的简单使用

    新建 WPF 项目,我是基于 .net 5.0-windows 创建的。 引入 Prism.DryIoc(8.1.97) 的 Nuget 包。 App.xaml 中引入命名空间。 将 App.xaml 中 Application 标签更改成 prism:PrismApplication 并去除 StartUri 属性,将 App.xaml.cs 中 Application 更改成 PrismApplication 。 实现 PrismApplication (实际上是 PrismApplicationBas

    2023年04月14日
    浏览(77)
  • WPF中prism模块化

    1、参照(wpf中prism框架切换页面-CSDN博客)文中配置MainView和MainViewModel 2、模块其实就是引用类库,新建两个类库ModuleA ModuleB,修改输出类型为类库,并配置以下文件: ModuleA == ModuleAProfile   ModuleB == ModuleBProfile  名字要对应 3、 ModuleA ModuleB中安装包: Prism.DryIoc(搜Prism.DryIoc找

    2024年02月07日
    浏览(48)
  • WPF+Prism 模块化编程(一)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 1、新建WPF项目,创建基于 .NET Framework 框架的应用程序,项目名称为 PrismModelDemo,创建步骤如下所示。 项目创建完成后,新建Views文件夹和ViewModels 文件夹,移动 MainWindow.xaml 至 Views文件下,在ViewModels文件中

    2024年04月09日
    浏览(105)
  • wpf prism左侧抽屉式菜单

    1.首先引入包MaterialDesignColors和MaterialDesignThemes 2.主页面布局 左侧菜单显示在窗体外,点击左上角菜单图标通过简单的动画呈现出来 3.左侧窗体外菜单 这里头像的图片写死了,需要的自己替换。 4.菜单样式 5.主页面事件 6.主页面内容 7.后台C#代码 RegionName 对应每一个创建Contr

    2024年03月11日
    浏览(83)
  • wpf 项目中使用 Prism + MaterialDesign

      1.通过nuget安装MaterialDesign  2.通过nuget安装Prism 3.修改App.xmal  红色矩形框是需要更改的地方  3.修改app.xmal.cs文件 修改红色矩形框中的内容   至此,编译不出错,就算是好了 这时会出现两个窗体 记得删除  StartupUri=\\\"MainWindow.xaml\\\"即可

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包