Нахождение холста в визуальном дереве

1

У меня есть элемент управления FlipView, который в своем шаблоне данных получил scrollviewer, который затем получил холст с элементами управления. Моя проблема в том, что мне нужно получить доступ к холсту внутри обработчика событий для события FlipView.SelectionChanged.

Xaml для FlipView выглядит так.

<FlipView Grid.Row="1"
   d:DataContext="{d:DesignInstance model:PageContent}"
   SelectionChanged="FlipView_SelectionChanged"
   ItemsSource="{Binding TiffPages}"
   x:Name="flBillImage">
   <FlipView.ItemTemplate>
       <DataTemplate>
          <ScrollViewer x:Name="scrollBill" 
               VerticalScrollBarVisibility="Auto" 
               HorizontalScrollBarVisibility="Auto" 
               ZoomMode="Enabled"
               DataContextChanged="scrollBill_DataContextChanged">
                   <Canvas x:Name="cvBill"
                       DataContextChanged="cvBill_DataContextChanged"
                       Loaded="cvBill_Loaded"
                       HorizontalAlignment="Left"
                       VerticalAlignment="Top"
                       FlowDirection="LeftToRight" >

                   <Image x:Name="imgBill"            
                       Loaded="imgBill_Loaded"
                       DataContextChanged="imgBill_DataContextChanged"
                       Canvas.ZIndex="0"
                       Source="{Binding BillImage}"
                       Visibility="{Binding IsFrameExtracted, Converter={StaticResource     BooleanToVisibilityConverter}}" />
               </Canvas>
           </ScrollViewer>
       </DataTemplate>
   </FlipView.ItemTemplate>
</FlipView>

И код С# для синтаксического анализа визуального дерева выглядит следующим образом:

 public static List<Control> AllChildren(DependencyObject parent)
    {
        var _List = new List<Control>();
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var _Child = VisualTreeHelper.GetChild(parent, i);
            if (_Child is Control)
            {
                _List.Add(_Child as Control);
            }
            _List.AddRange(AllChildren(_Child));
        }
        return _List;
    }

Используется как:

var ctrls = AllChildren(flBillImage);

Проверяя возвращенный список, я могу найти ScrollViewer, но я не могу найти Canvas. Я также попытался предоставить scrollviewer, возвращенный как аргумент функции AllChildren, но я все еще не могу найти элемент управления Canvas.

Я делаю все это неправильно?

Теги:
xaml
windows-store-apps
windows-8.1

1 ответ

0
Лучший ответ

Некоторое время назад я столкнулся с подобным типом проблемы. Это решение использовалось для доступа к дочерним элементам дерева в коде. Очень прямолинейно.

Надеюсь, это вам поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню