Как получить доступ к содержимому в TabControl.ContentTemplate в обратном коде c #? - PullRequest
0 голосов
/ 23 апреля 2020

Я пишу векторный редактор. До того, как я начал использовать TabControl, у меня все работало. Однако возникла необходимость загружать несколько открытых файлов одновременно. Каждый открытый файл отображается на TabItem. В результате чата на форумах я обнаружил, что вам нужно создать MVVM для правильного отображения данных из разных файлов. Мне посоветовали установить общий шаблон для всех вкладок. При добавлении элементов в коллекцию, с которой связан TabControl, вкладки будут создаваться автоматически с использованием этого шаблона. Я сделал следующее:

<TabControl x:Name="Drawing_TabControl" Grid.Row="0" Background="WhiteSmoke"
                    SelectionChanged="Drawing_TabControl_SelectionChanged">
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <Grid x:Name="Drawing_Grid_Tab"
                          Background="WhiteSmoke">
                        <Canvas x:Name="coordinateCanvas_Tab"
                                Background="GhostWhite"
                                Height="6cm"
                                Width="16cm"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"></Canvas>
                        <Canvas x:Name="gridCanvas_Tab"
                                Background="Transparent"
                                Height="6cm"
                                Width="16cm"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                SizeChanged="gridCanvas_SizeChanged"></Canvas>
                        <Border x:Name="drawing_Border_Tab"
                                BorderBrush="Black"
                                BorderThickness="0.5 0.5 0.5 0.5"
                                Height="4cm"
                                Width="14cm"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"></Border>
                        <Canvas x:Name="drawing_gridCanvas_Tab"
                                Background="White"
                                Height="4cm"
                                Width="14cm"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"></Canvas>
                        <Canvas x:Name="drawing_tempCanvas_Tab"
                                Background="Transparent"
                                Height="4cm"
                                Width="14cm"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"></Canvas>
                        <Canvas x:Name="drawingCanvas_Tab"
                                Background="Transparent"
                                Height="4cm"
                                Width="14cm"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                ClipToBounds="True"></Canvas>
                    </Grid>
                </DataTemplate>
            </TabControl.ContentTemplate>
            <TabItem x:Name="drawTabItem1"
                     Header="Макет_1" Background="WhiteSmoke">
            </TabItem>
        </TabControl>[enter image description here][1]

Как я могу получить доступ к x:Name="coordinateCanvas_Tab" в обратном коде, например?

1 Ответ

0 голосов
/ 23 апреля 2020

Если вам посоветовали и вы реализовали этот совет, чтобы перейти на структуру кода MVVM, то вы больше не обращаетесь к компоненту XAML непосредственно из кода, стоящего за файлом. Вместо этого вам нужно подключить двухстороннюю привязку между вашим XAML-видом и используемой вами ViewModel.

Это в первую очередь выполняется с помощью объекта BindingContext в представлении после инициализации экрана в коде вашего конструктора.

После этого вы можете назначить значения объекту Collection в вашей ViewModel и привязать к нему в XAML. Чтобы выполнить динамическую вставку вкладки c, которую вы хотите сделать, вы можете использовать атрибут BindableLayout, а затем в значениях привязки ItemTemplate для каждой вкладки из объектов коллекции.

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

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/xaml-basics/data-bindings-to-mvvm

...