服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - WPF自动隐藏的消息框的实例代码

WPF自动隐藏的消息框的实例代码

2021-12-01 13:51逆天の萌娃 C#

本文给大家介绍WPF自动隐藏的消息框实例代码,当鼠标放上去将一直显示,移开动画继续,提供normal和error两种边框。非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧

(鼠标放上去将一直显示,移开动画继续),提供normal和error两种边框。

介绍:传统的确定,取消,ok,cancal之类的对话框太繁琐了,由于项目需要而诞生的仿手机式提示对话框。当然传统的对话框项目中也有,这里就不做介绍了。

出场和退场动画做得很简单,就用blend随便鼓捣了一番,将就用吧。

预览效果如下:

WPF自动隐藏的消息框的实例代码

思路其实很简单:将窗体透明化->布局和样式设计->后台传值调用。

准备工作:microsoft.expression.interactions.dll和system.windows.interactivity.dll的引用。blend中大多数行为需要需要这2个dll,必备啊!

1,将窗体透明化,无边框化:(在.net 4.5中 拖动和缩放窗体再也不用自己写代码了,集成的 <windowchrome/>就可以实现拖动缩放窗体等诸多功能。)

关键设置如下:

?
1
allowstransparency="true" horizontalalignment="center" background="transparent" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" windowstyle="none"

2,布局,主要包括初始布局和动画过渡2个方面:

静态界面布局:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<grid  horizontalalignment="center" verticalalignment="top" x:name="back">
    <border padding="38 0" x:name="br" horizontalalignment="center" verticalalignment="center">
      <i:interaction.triggers>
        <i:eventtrigger eventname="mouseenter">
          <ei:controlstoryboardaction storyboard="{staticresource showsb}" controlstoryboardoption="stop"/>
        </i:eventtrigger>
        <i:eventtrigger eventname="mouseleave">
          <ei:controlstoryboardaction storyboard="{staticresource mouseleave}"/>
        </i:eventtrigger>
      </i:interaction.triggers>
      <grid horizontalalignment="center" verticalalignment="center">
        <grid horizontalalignment="center" verticalalignment="center">
          <grid.rowdefinitions>
            <rowdefinition height="12"></rowdefinition>
            <rowdefinition height="auto"></rowdefinition>
            <rowdefinition height="12"></rowdefinition>
          </grid.rowdefinitions>
          <border visibility="visible" x:name="grid1" grid.rowspan="3" rendertransformorigin="0.5,0.5" borderbrush="#00a0e9" borderthickness="1" cornerradius="8">
            <border.rendertransform>
              <transformgroup>
                <scaletransform/>
                <skewtransform/>
                <rotatetransform/>
                <translatetransform/>
              </transformgroup>
            </border.rendertransform>
            <border.background>
              <lineargradientbrush endpoint="1,1" mappingmode="relativetoboundingbox" startpoint="0,0">
                <gradientstop color="#eff0f2" offset="0.75"/>
                <gradientstop color="#eff0f2" offset="0.25"/>
                <gradientstop color="#eff0f2" offset="1"/>
                <gradientstop color="#eff0f2"/>
              </lineargradientbrush>
            </border.background>
          </border>
          <border x:name="grid2" visibility="visible" opacity="1" grid.rowspan="3" rendertransformorigin="0.5,0.5" borderbrush="#f35150" borderthickness="1" cornerradius="8">
            <border.rendertransform>
              <transformgroup>
                <scaletransform/>
                <skewtransform/>
                <rotatetransform/>
                <translatetransform/>
              </transformgroup>
            </border.rendertransform>
            <border.background>
              <lineargradientbrush endpoint="1,1" mappingmode="relativetoboundingbox" startpoint="0,0">
                <gradientstop color="#eff0f2" offset="0.75"/>
                <gradientstop color="#eff0f2" offset="0.25"/>
                <gradientstop color="#eff0f2" offset="1"/>
                <gradientstop color="#eff0f2"/>
              </lineargradientbrush>
            </border.background>
          </border>
          <textblock  margin="38 0 38 0" grid.row="1" fontsize="16" foreground="#64676d" x:name="tb" text="{binding message,relativesource={relativesource ancestortype=window},fallbackvalue=失败信息}" textwrapping="wrap" minwidth="200" verticalalignment="center" horizontalalignment="center" rendertransformorigin="0.5,0.5" maxwidth="600" textalignment="center" fontfamily="microsoft yahei">
            <textblock.rendertransform>
              <transformgroup>
                <scaletransform/>
                <skewtransform/>
                <rotatetransform/>
                <translatetransform/>
              </transformgroup>
            </textblock.rendertransform></textblock>
        </grid>
      </grid>
    </border>
  </grid>

进入和退出的动画控制:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<storyboard x:key="showsb" completed="storyboard_completed">
      <doubleanimationusingkeyframes storyboard.targetproperty="(uielement.rendertransform).(transformgroup.children)[3].(translatetransform.y)" storyboard.targetname="grid1">
        <easingdoublekeyframe keytime="0" value="{binding yoffset}"/>
        <easingdoublekeyframe keytime="0:0:0.5" value="0"/>
        <easingdoublekeyframe keytime="0:0:3" value="0"/>
        <easingdoublekeyframe keytime="0:0:3.5" value="{binding yoffset}"/>
      </doubleanimationusingkeyframes>
      <doubleanimationusingkeyframes storyboard.targetproperty="(uielement.rendertransform).(transformgroup.children)[3].(translatetransform.y)" storyboard.targetname="grid2">
        <easingdoublekeyframe keytime="0" value="{binding yoffset}"/>
        <easingdoublekeyframe keytime="0:0:0.5" value="0"/>
        <easingdoublekeyframe keytime="0:0:3" value="0"/>
        <easingdoublekeyframe keytime="0:0:3.5" value="{binding yoffset}"/>
      </doubleanimationusingkeyframes>
      <doubleanimationusingkeyframes storyboard.targetproperty="(uielement.rendertransform).(transformgroup.children)[3].(translatetransform.y)" storyboard.targetname="tb">
        <easingdoublekeyframe keytime="0" value="{binding yoffset}"/>
        <easingdoublekeyframe keytime="0:0:0.5" value="0"/>
        <easingdoublekeyframe keytime="0:0:3" value="0"/>
        <easingdoublekeyframe keytime="0:0:3.5" value="{binding yoffset}"/>
      </doubleanimationusingkeyframes>
    </storyboard>
    <storyboard x:key="mouseleave" completed="storyboard_completed">
      <doubleanimationusingkeyframes  storyboard.targetproperty="(uielement.opacity)" storyboard.targetname="grid1">
        <easingdoublekeyframe keytime="0:0:0.5" value="0"/>
      </doubleanimationusingkeyframes>
      <doubleanimationusingkeyframes storyboard.targetproperty="(uielement.opacity)" storyboard.targetname="grid2">
        <easingdoublekeyframe keytime="0:0:0.5" value="0"/>
      </doubleanimationusingkeyframes>
      <doubleanimationusingkeyframes storyboard.targetproperty="(uielement.opacity)" storyboard.targetname="tb">
        <easingdoublekeyframe keytime="0:0:0.5" value="0"/>
      </doubleanimationusingkeyframes>
      <doubleanimationusingkeyframes storyboard.targetproperty="(uielement.rendertransform).(transformgroup.children)[3].(translatetransform.y)" storyboard.targetname="grid1">
        <easingdoublekeyframe keytime="0:0:0.5" value="{binding yoffset}"/>
      </doubleanimationusingkeyframes>
      <doubleanimationusingkeyframes storyboard.targetproperty="(uielement.rendertransform).(transformgroup.children)[3].(translatetransform.y)" storyboard.targetname="grid2">
        <easingdoublekeyframe keytime="0:0:0.5" value="{binding yoffset}"/>
      </doubleanimationusingkeyframes>
      <doubleanimationusingkeyframes storyboard.targetproperty="(uielement.rendertransform).(transformgroup.children)[3].(translatetransform.y)" storyboard.targetname="tb">
        <easingdoublekeyframe keytime="0:0:0.5" value="{binding yoffset}"/>
      </doubleanimationusingkeyframes>
    </storyboard>

注意:鼠标移动上去停止动画和移出后快速消失的代码为:

?
1
2
3
4
5
6
7
8
<i:interaction.triggers>
<i:eventtrigger eventname="mouseenter">
<ei:controlstoryboardaction storyboard="{staticresource showsb}" controlstoryboardoption="stop"/>
</i:eventtrigger>
<i:eventtrigger eventname="mouseleave">
<ei:controlstoryboardaction storyboard="{staticresource mouseleave}"/>
</i:eventtrigger>
</i:interaction.triggers>

后台代码逻辑:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private bool iserror = false;
public void show(string messageboxtext, bool iserror = false)
{
this.iserror = iserror;
this.message = messageboxtext;
this.show();
}
public onlyshowmessagebox()
{
initializecomponent();
this.datacontext = new model() { yoffset = -300d };
this.loaded += (y, k) =>
{
this.top = 41;
this.left = (systemparameters.workarea.width) / 2 - this.actualwidth / 2;
if (iserror)
{
this.grid.visibility = visibility.collapsed;
}
else { this.grid.visibility = visibility.collapsed; }
(this.resources["showsb"] as storyboard).begin();
};
}
private void storyboard_completed(object sender, eventargs e)
{
this.close();
}

其中 :

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class model : modelbase
{
private double yoffset;
public double yoffset
{
get { return yoffset; }
set
{
yoffset = value;
raisepropertychangedevent("yoffset");
}
}
}

其中modelbase在 可分组的选择框控件(mvvm下)(toggle样式 仿造单选框radiobutton,复选框checkbox功能) 中有介绍。

最后,调用方法:

new onlyshowmessagebox().show("请注意:前方高能,禁止入内!", false);

或者

new onlyshowmessagebox().show("不存在此对象!", true);

以上所述是小编给大家介绍的wpf自动隐藏的消息框的全部叙述,希望对大家有所帮助,如果大家想了解更多内容敬请关注服务器之家!

原文链接:http://www.cnblogs.com/yk250/p/5660777.html

延伸 · 阅读

精彩推荐
  • C#如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    这篇文章主要给大家介绍了关于如何使用C#将Tensorflow训练的.pb文件用在生产环境的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴...

    bbird201811792022-03-05
  • C#三十分钟快速掌握C# 6.0知识点

    三十分钟快速掌握C# 6.0知识点

    这篇文章主要介绍了C# 6.0的相关知识点,文中介绍的非常详细,通过这篇文字可以让大家在三十分钟内快速的掌握C# 6.0,需要的朋友可以参考借鉴,下面来...

    雨夜潇湘8272021-12-28
  • C#深入理解C#的数组

    深入理解C#的数组

    本篇文章主要介绍了C#的数组,数组是一种数据结构,详细的介绍了数组的声明和访问等,有兴趣的可以了解一下。...

    佳园9492021-12-10
  • C#VS2012 程序打包部署图文详解

    VS2012 程序打包部署图文详解

    VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield。网上有很多第三方的打包工具,但为什么偏要使用微软...

    张信秀7712021-12-15
  • C#SQLite在C#中的安装与操作技巧

    SQLite在C#中的安装与操作技巧

    SQLite,是一款轻型的数据库,用于本地的数据储存。其优点有很多,下面通过本文给大家介绍SQLite在C#中的安装与操作技巧,感兴趣的的朋友参考下吧...

    蓝曈魅11162022-01-20
  • C#利用C#实现网络爬虫

    利用C#实现网络爬虫

    这篇文章主要介绍了利用C#实现网络爬虫,完整的介绍了C#实现网络爬虫详细过程,感兴趣的小伙伴们可以参考一下...

    C#教程网11852021-11-16
  • C#C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    这篇文章主要介绍了C#设计模式之Strategy策略模式解决007大破密码危机问题,简单描述了策略模式的定义并结合加密解密算法实例分析了C#策略模式的具体使用...

    GhostRider10972022-01-21
  • C#C#微信公众号与订阅号接口开发示例代码

    C#微信公众号与订阅号接口开发示例代码

    这篇文章主要介绍了C#微信公众号与订阅号接口开发示例代码,结合实例形式简单分析了C#针对微信接口的调用与处理技巧,需要的朋友可以参考下...

    smartsmile20127762021-11-25