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

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

比如ListView,GridView等。

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

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

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

<FlipView x:Name="flipView" Background="{ThemeResource SystemControlChromeMediumAcrylicWindowMediumBrush }">
<FlipView.ItemTemplate>
<DataTemplate>
<Grid>
<Image x:Name="myImage" Grid.RowSpan="3" Stretch="Uniform"
Source="{Binding img_realurl}" IsDoubleTapEnabled="True"
DoubleTapped="detailImage_DoubleTapped"/> <TextBlock Text="{Binding sitename}" Margin="3,0,0,0" VerticalAlignment="Center" Foreground="{ThemeResource SystemControlBackgroundAccentBrush}"/>
</StackPanel>
</Grid>
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>

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

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

查找的方法如下:

        public static T MyFindListBoxChildOfType<T>(DependencyObject root) where T : class
{
var MyQueue = new Queue<DependencyObject>();
MyQueue.Enqueue(root);
while (MyQueue.Count > )
{
DependencyObject current = MyQueue.Dequeue();
for (int i = ; 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<Image>(flipView);
headImage.PointerEntered += Head_PointerEntered;
headImage.PointerExited += Head_PointerExited;
}

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

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

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

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

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

UWP 查找模板中的控件的更多相关文章

  1. WPF备忘录(5)怎样修改模板中的控件

    首先,想问大家一个问题,你们如果要给一个Button添加背景图片会怎么做?(呵呵,这个问题又点小白哈) 是这样吗? <Button Height="57" Horizonta ...

  2. WPF关于控件 父级控件,子级控件,控件模板中的控件,等之间的相互访问

    原文:WPF关于控件 父级控件,子级控件,控件模板中的控件,等之间的相互访问 1,在菜单中访问 弹出菜单的控件 var mi = sender as MenuItem;//菜单条目 MenuItem ...

  3. WPF 获取控件模板中的控件

    DG是控件名称public T GetVisualChild<T>(DependencyObject parent, Func<T, bool> predicate) wher ...

  4. 在DataList、Repeater的HeaderTemplate和FooterTemplate模板中寻找控件FindControl

    [程序代码] <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> ...

  5. WPF日积月累之DataGrid样式以及操作数据模板中的控件

    一.效果图 二.代码预览 1 <Window x:Class="Test.MainWindow" 2 xmlns="http://schemas.microsoft ...

  6. UWP入门(五)--控件模板

    原文:UWP入门(五)--控件模板 通过在 XAML 框架中创建控件模板,你可以自定义控件的可视结构和可视行为(eg:勾选框的三种状态). 控件有多个属性,如 Background.Foregroun ...

  7. 关于在DataGrid.RowDetailsTemplate中的控件查找不到的问题

    DataGrid.RowDetailsTemplate中的控件需要显示出来才能查找,可以尝试在MouseLeftButtonUp等事件中处理.

  8. WindowsXamlHost:在 WPF 中使用 UWP 控件库中的控件

    在 WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit) 一文中,我们说到了在 WPF 中引入简单的 UWP 控件以及相关的注意事项 ...

  9. dev中gridview控件 z

    目录:一.客户端常用1.常用API2.聚焦行变更事件3.客户端选择多行4.客户端选择行5. 获取选择的行数目6.单击行时,选中行7.通过checkbox 选择行8.选择所有行9.启动编辑框,Conta ...

随机推荐

  1. javabean为什么需要序列化

    无论用hibernate或者mybatis结合spring做开发还是其他,系统里持久类往往要实现序列化, implements Serializable.我还是比较好奇,为什么要这样做呢?一直只知道个 ...

  2. 【WebService】调用第三方提供的webService服务(七)

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...

  3. [C#]this.Invoke和this.BeginInvoke的区别

    private void button1_Click(object sender, EventArgs e) { "; this.Invoke(new EventHandler(delega ...

  4. 通俗理解 CPU && GPU

    CPU 力气大啥P事都能干,还要协调.GPU 上面那家伙的小弟,老大让他处理图形,这方面处理简单,但是量大,老大虽然能处理,可是老大只有那么几个兄弟,所以不如交给小弟处理了,小弟兄弟多,有数百至数千个 ...

  5. 2018.11.07 NOIP模拟 异或(数位dp)

    传送门 对于每个二进制位单独考虑贡献. 然后对于两种情况分别统计. 对于第二种要用类似数位dpdpdp的方法来计算贡献. 代码

  6. idea中Eclipse Code Formatter插件设置和使用,以及注释模板的修改

    在settings里面找到plugins这个选项,搜索Eclipse Code Formatter,点击安装,重启idea即可进行配置: 首先,先安装Eclipse Code Formatter插件: ...

  7. 第19章:MongoDB-聚合操作--聚合管道--$limit+$skip

    ①$limit “$limit”:负责数据的取出个数: “$skip”:数据的跨过个数. ②范例:使用“$limit”设置取出的个数

  8. 预装apk

    一般是在device/rockchip/ LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := LanguageSetLOC ...

  9. attachEvent方法绑定事件

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. 【王者荣耀之IT大神版】比赛制度说明(匹配赛、排位赛、赏金赛)

    匹配赛(30分钟): 所得金币=6金币/分钟 经验(挂机:玩手机超过30秒): 名次 经验值 胜利条件 失败条件 1 5 提前10min 超出1min 2 4 提前8min 超出3min 3 4 提前 ...