博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UWP 查找模板中的控件
阅读量:6082 次
发布时间:2019-06-20

本文共 1930 字,大约阅读时间需要 6 分钟。

原文:

这个标题我也不知道咋起,意思说一下你就明白。

1. 对官方控件的模板进行定制修改,以满足多样化需求,还有漂亮的UI

比如ListView,GridView等。

2. 在设计的情况下并没有这个控件,而在运行时的时候出现了它

比如微软的广告组件,他们叫AdControl,在运行时其实就是一个WebView

 

下面看一下我的实际项目中的代码,来举例说明:

 

 

我这个是定义的FlipView的模板,大家可以发现,里面用到个Image控件,而这个控件,你如果直接定义他的x:Name的话,在后台代码.cs里面使用myImage,是识别不到的。微软不让这么用。

那么怎么办,就是需要在运行时,通过代码查找他,然后再操作即可。

 

查找的方法如下:

public static T MyFindListBoxChildOfType
(DependencyObject root) where T : class { var MyQueue = new Queue
(); MyQueue.Enqueue(root); while (MyQueue.Count > 0) { DependencyObject current = MyQueue.Dequeue(); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(current); i++) { var child = VisualTreeHelper.GetChild(current, i); var typedChild = child as T; if (typedChild != null) { return typedChild; } MyQueue.Enqueue(child); } } return null; }

 

 

然后在页面加载完成的事件里面使用,

private void Page_Loaded(object sender, RoutedEventArgs e)        {
Image headImage = MyFindListBoxChildOfType(flipView); headImage.PointerEntered += Head_PointerEntered; headImage.PointerExited += Head_PointerExited; }

 

记下来就可以为所欲为的操作了。

 

 

有人说,我们的模板里有多个Image控件,咋办?

你将查找的函数改成返回List<T>即可,然后在Looaded里面按顺序取即可。

private void Page_Loaded(object sender, RoutedEventArgs e)        {            Image detailImage = MyFindListBoxChildOfType(flipView)[0];            Image headImage = MyFindListBoxChildOfType(flipView)[1];        }

 

这个顺序就是你在Xaml里面写的顺序。

 

转载地址:http://mykwa.baihongyu.com/

你可能感兴趣的文章
Sql 查询锁
查看>>
HTTP Protocol
查看>>
Codeforces 919E - Congruence Equation
查看>>
React Diff 算法
查看>>
返回上一页几种方法
查看>>
WPF 自定义ComboBox样式,自定义多选控件
查看>>
WPF 自定义MenuItem样式
查看>>
Numerical Geometry of Image
查看>>
1107 Social Clusters
查看>>
Python之路【第十八篇】:模块知识
查看>>
Frogger
查看>>
人机交互评价
查看>>
python发送邮件
查看>>
从页面上灵活增删改查
查看>>
SQL操作简单实现
查看>>
C# 只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面
查看>>
java基础4
查看>>
patch 打补丁,和diff 生成制作补丁
查看>>
ios之UITextView
查看>>
ios之UITableView
查看>>