【问题标题】:Creating objects from xaml code and identifying them [duplicate]从xaml代码创建对象并识别它们[重复]
【发布时间】:2019-06-03 04:00:39
【问题描述】:

我有一个窗口,其中有一个TabControl。每当我按下某个按钮时,应该会在下面添加一个带有布局的 tabitem。

我必须将我的 XAML 代码转换为 C# 手册还是有其他选择?同样,在我创建了这个 tabitem 之后,我需要能够对其进行编辑,这意味着我需要对每个 tabitem 进行一些参考,并且能够识别哪个是哪个。

<TabItem Header="Table 1">
                <DockPanel>
                    <Grid DockPanel.Dock="Top" Margin="5">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="2*"/>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>

                        <DataGrid Grid.Column="0">
                            <DataGrid.Columns>
                                <DataGridTextColumn Header="Order number"/>
                                <DataGridTextColumn Header="Customer"/>
                                <DataGridTextColumn Header="Total Price"/>
                                <DataGridComboBoxColumn Header="Urgency"/>
                            </DataGrid.Columns>

                        </DataGrid>

                        <StackPanel Grid.Column="1">
                            <Label Content="Maximum Seats:"/>
                            <Label Content="Current connections:"/>
                        </StackPanel>

                        <DockPanel Grid.Column="2" LastChildFill="False" HorizontalAlignment="Right">
                            <Button Name="BtnEditTable" Content="Edit Table" DockPanel.Dock="Top" Click="BtnEditTable_Click"/>
                        </DockPanel>
                    </Grid>
                    <TabControl Margin="5,0,0,0">
                        <TabItem Header="Customer 1">
                            <StackPanel>
                                <Label Content="Connected:"/>
                                <DataGrid>
                                    <DataGrid.Columns>
                                        <DataGridTextColumn Header="Order number"/>
                                        <DataGridTextColumn Header="Name"/>
                                        <DataGridTextColumn Header="Price"/>
                                    </DataGrid.Columns>
                                </DataGrid>
                            </StackPanel>
                        </TabItem>
                    </TabControl>
                </DockPanel>
            </TabItem>

【问题讨论】:

  • 您应该将 TabControl 的 ItemsSource 绑定到包含每个选项卡数据的项目集合。

标签: c# wpf xaml


【解决方案1】:

您可以在 XAML 中使用 Name 属性,然后在代码隐藏中访问该对象。例如

<Grid Name="myGrid"> ... </Grid>

后面的示例代码:

myGrid.Visibility = Visibility.Collapsed;

【讨论】:

  • 但是我想通过一个按钮创建尽可能多的 tabitems,这对于这个解决方案是可行的,因为我必须提前创建所有 tabitems
  • @asd 为什么不用TabItem tabItem = new TabItem();
  • 因为我希望它有上面的布局,这意味着很多行代码
  • 如果我理解正确,没有别的办法。您只能在代码隐藏中创建对象。
  • 您只能在代码隐藏中创建对象”是明显错误的。使用 WPF,动态创建的视图元素通常由 DataTemplates 创建,在 XAML 中声明。
猜你喜欢
  • 2012-06-09
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
相关资源
最近更新 更多