如何在c#回车代码中访问TabControl.ContentTemplate中的内容?

问题描述 投票:0回答:1

我写的是一个矢量编辑器。在我开始使用TabControl之前,一切都能正常工作。然而,有必要同时上传几个打开的文件。每个打开的文件都显示在TabItem上。通过在论坛上的聊天,我发现你需要创建一个MVVM来正确显示不同文件的数据。有人建议我为所有的Tab设置一个通用的模板。将项目添加到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" 比如说,在后面的代码中?

c# wpf mvvm tabcontrol contenttemplate
1个回答
0
投票

如果你已经被建议并且已经实现了这个建议,改变为MVVM代码结构,那么你就不能再直接从文件后面的代码中访问XAML组件了.相反,你需要在你的View XAML和你正在使用的ViewModel之间进行双向绑定。

这主要是通过在您的构造函数代码中初始化屏幕后,利用视图中的BindingContext对象来完成的。

之后你就可以在你的ViewModel中给一个Collection对象赋值,并在XAML中绑定到它。要做你想做的动态标签插入,你可以利用BindableLayout属性,然后在ItemTemplate中为每个标签绑定来自集合对象的值。

请看一下这个指南,以便更好地理解Bindings。

https:/docs.microsoft.comen-usxamarinxamarin-formsxamlxaml-basicsdata-bindings-to-mvvm。

© www.soinside.com 2019 - 2024. All rights reserved.