为了账号安全,请及时绑定邮箱和手机立即绑定

如何访问XAML DataTemplate中的控件?

如何访问XAML DataTemplate中的控件?

暮色呼如 2019-09-24 14:31:34
我有这个翻转视图:<FlipView x:Name="models_list" SelectionChanged="selectionChanged"> <FlipView.ItemTemplate>          <DataTemplate>                <Grid x:Name="cv">                        <Image x:Name="img1" Source = "{Binding ModelImage}" Stretch="Fill" Tag="{Binding ModelTag}"/>                </Grid>           </DataTemplate>  </FlipView.ItemTemplate>我想找到当前选定索引的img1。在搜索它时,我在这里的一些帖子中找到了此方法:private DependencyObject FindChildControl<T>(DependencyObject control, string ctrlName)    {        int childNumber = VisualTreeHelper.GetChildrenCount(control);        for (int i = 0; i < childNumber; i++)        {            DependencyObject child = VisualTreeHelper.GetChild(control, i);            FrameworkElement fe = child as FrameworkElement;            // Not a framework element or is null            if (fe == null) return null;            if (child is T && fe.Name== ctrlName)            {                // Found the control so return                return child;            }            else            {                // Not found it - search children                DependencyObject nextLevel = FindChildControl<T>(child, ctrlName);                if (nextLevel != null)                    return nextLevel;            }        }        return null;    }它向我返回了flipview的第一个索引上的Image,但我需要当前选择的索引上存在的图像。我尝试编辑此方法,但找不到所需的控件。谁能帮我?
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

获取对DataTemplate中元素的简单解决方案是将DataTemplate的内容包装在UserControl中,在其中您可以访问ItemsControl项中的所有UI元素。我认为FlipView通常会将其项目虚拟化,因此即使您绑定了100个项目-UI中实际上只有2-3个可能具有当前表示形式(其中1-2个处于隐藏状态),因此您必须记住当您想要替换任何内容,仅在将项目加载到控件中时才进行更改。


如果确实需要标识代表ItemsSource中项目的项目容器,则可以检查FlipView的ItemContainerGenerator属性及其ContainerFromItem()方法。


要获取项目的坐标,可以使用GetBoundingRect()WinRT XAML Toolkit中的扩展方法。


总体而言,根据您的评论,最好的方法实际上可能完全不同。如果将FlipView绑定到源,通常可以通过更改绑定的源集合项的属性来控制显示或覆盖的图像。


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 809 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信