WPF 添加半透明的遮罩层AdornerLayer,微信搜索效
来源:互联网 发布:淘宝店铺短连接怎么弄 编辑:程序博客网 时间:2024/06/06 03:41
在一个page页面上添加一个半透明的遮罩层,遮罩层里显示一个用户控件。 效果就是微信的winows版的搜索功能。
这里要借助AdornerLayer实现弹出遮罩层,半透效果在用户控件中定义。
1、首先自定义一个用户控件。这里就不描述了。怎么制作半透明的控件和窗体,请参照我的另外一个博文:
2、然后定义一个类,继承Adorner。
代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Documents;using System.Windows.Media;using Doit.Chat.Views.Control.SearchResultControl;namespace Doit.Chat.Views.Adorners {public class SearchAdorner: Adorner { private SearchResultControl searchResultControl; private VisualCollection visualCollection; public SearchResultControl ResultControl { get { return searchResultControl; } } public SearchAdorner(UIElement adornedElement) : base(adornedElement) { visualCollection = new VisualCollection(this); searchResultControl = new SearchResultControl(); visualCollection.Add(searchResultControl); } protected override int VisualChildrenCount { get { return visualCollection.Count; } } protected override Visual GetVisualChild(int index) { return visualCollection[index]; } protected override void OnRender(DrawingContext drawingContext) { } protected override Size ArrangeOverride(Size finalSize) { // where to position the customControl...this is relative to the element you are adorning double x = 0; double y = 0; searchResultControl.Arrange(new Rect(x, y, finalSize.Width - 1, finalSize.Height)); // you need to arrange // Return the final size. return finalSize; }}}
SearchResultControl 就是定义的控件。
3、添加该遮罩层到目标的控件上。
定义遮罩层对象和AdornerLayer对象:
private AdornerLayer searchAdornerLayer = null; private SearchAdorner searchAdorner = null;
取得AdornerLayer对象,并把遮罩层对象添加进去,ScrollViewer 是遮罩层要覆盖的控件对象:
// 初始化搜索窗体 searchAdornerLayer = AdornerLayer.GetAdornerLayer(ScrollViewer); searchAdorner = new SearchAdorner(ScrollViewer); searchAdorner.ResultControl.SetMouseDoubleClickEvent(new MouseButtonEventHandler(SearchResult_MouseDoubleClick)); searchAdornerLayer.Add(searchAdorner); searchAdornerLayer.Visibility = Visibility.Hidden; // 初始化隐藏遮罩层
4、显示和隐藏遮罩层:
searchAdornerLayer.Visibility = Visibility.Visible; // 显示遮罩层searchAdornerLayer.Visibility = Visibility.Hidden; // 初始化隐藏遮罩层
其中取得GetAdornerLayer会返回null。原因是:自定义窗体样式的时候把AdornerDecorator弄丢了。
解决方法就是,添加进窗体:
<Page> <AdornerDecorator Margin="0"> <Grid> // 窗体或page内容 </Grid> </AdornerDecorator></Page>
0 0
- WPF 添加半透明的遮罩层AdornerLayer,微信搜索效
- WPF AdornerLayer.GetAdornerLayer返回null
- 用wpf打造窗口的半透明效果
- WPF实现半透明背景的弹框
- WPF实现半透明背景的弹框
- WPF实用指南一:在WPF窗体的边框中添加搜索框和按钮
- WPF 微信 MVVM
- WPF 半透明窗体
- (WPF) 半透明窗体
- WPF 半透明窗体
- Android添加半透明操作提示的方法
- 微信搜索:又一个被高估的“微信功能”
- 类似微信的通讯录搜索
- Android 设置半透明搜索框的三种方式 《H》
- ios微信点击超链接,去掉半透明黑色框效果
- 添加半透明水印
- 去掉App自动添加的图标半透明效果的方法
- Android使用ShowcaseView添加半透明操作提示图片的方法
- A protocol for Dying
- Android 音频系统:从 AudioTrack 到 AudioFlinger
- java socket
- Android面试题-手把手教你如何解决as jar包冲突
- 面向对象之类间的关系
- WPF 添加半透明的遮罩层AdornerLayer,微信搜索效
- 1065: 【计算直线的交点数】
- 库与框架的区别
- TCP,IP,HTTP,SOCKET区别和联系
- 2017-05-05 angularjs的ng-switch-when用法
- 数据结构+算法
- 算法导论程序3--最大子数组问题(Python)
- 微分与导数的四则运算关系
- 一个简单的Spring的AOP例子