如何访问XAML DataTemplate中的控件?

我有这个翻转视图:


<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,但我需要当前选择的索引上存在的图像。我尝试编辑此方法,但找不到所需的控件。谁能帮我?


暮色呼如
浏览 810回答 3
3回答

月关宝盒

获取对DataTemplate中元素的简单解决方案是将DataTemplate的内容包装在UserControl中,在其中您可以访问ItemsControl项中的所有UI元素。我认为FlipView通常会将其项目虚拟化,因此即使您绑定了100个项目-UI中实际上只有2-3个可能具有当前表示形式(其中1-2个处于隐藏状态),因此您必须记住当您想要替换任何内容,仅在将项目加载到控件中时才进行更改。如果确实需要标识代表ItemsSource中项目的项目容器,则可以检查FlipView的ItemContainerGenerator属性及其ContainerFromItem()方法。要获取项目的坐标,可以使用GetBoundingRect()WinRT XAML Toolkit中的扩展方法。总体而言,根据您的评论,最好的方法实际上可能完全不同。如果将FlipView绑定到源,通常可以通过更改绑定的源集合项的属性来控制显示或覆盖的图像。
打开App,查看更多内容
随时随地看视频慕课网APP