WPF TabControl - 以编程方式模板化和创建选项卡

问题描述

我正在使用 ContentTemplate 在 WPF 中创建一个选项卡控件。

<TabControl x:Name="tabOrders">
        <TabControl.ContentTemplate>
            <DataTemplate x:Name="TabItemTemplate">
                <ScrollViewer Height="550" VerticalScrollBarVisibility="Auto">
                    <StackPanel Orientation="Vertical" Margin="0,10,100">
                        <StackPanel Orientation="Horizontal" Margin="10,20" HorizontalAlignment="Stretch">
                            <Button Width="100" Margin="0,20,0" x:Name="btnUpload" Click="btnUpload_Click">Upload</Button>
                            <ComboBox Width="250" Margin="0,0" x:Name="ddlPaperType" DataContext="{Binding paper_id }"></ComboBox>
                            <Button Width="100" Margin="0,0" x:Name="btnApplyAll" Click="btnApplyAll_Click">Apply All</Button>
                        </StackPanel>
                        <ListView x:Name="lvImages" HorizontalAlignment="Stretch" VerticalAlignment="Top">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <UniformGrid Columns="5" HorizontalAlignment="Stretch"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Vertical" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                                        <Image Height="100" Width="100" Source="{Binding FileName}" HorizontalAlignment="Stretch" VerticalAlignment="Top" Stretch="UniformToFill" />
                                        <ComboBox x:Name="cmbPaperType" ItemsSource="{Binding paper_id}"  Margin="5" DisplayMemberPath="name" SelectedValuePath="_id" ></ComboBox>
                                        <!--<TextBlock Text="{Binding Title}" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" />-->
                                    </StackPanel>

                                </DataTemplate>
                            </ListView.ItemTemplate>

                        </ListView>
                    </StackPanel>
                </ScrollViewer>
            </DataTemplate>
        </TabControl.ContentTemplate>

    </TabControl>

使用以下代码创建标签项:

tabOrders.DataContext = DataContext;

        List<TabContext> context = (List<TabContext>)DataContext;
        foreach (TabContext tabContext in context)
        {
            TabItem tabItem = new TabItem();
            tabItem.DataContext = tabContext;
            tabItem.Header = tabContext.item.order_number + " - " + tabContext.item.ProductArr.product_name ;
            tabOrders.Items.Add(tabItem);
        }

这里的问题是两个选项卡都显示相同的内容。我是 WPF 的新手,不知道我错过了什么。请指教。

更新:12 月 28 日

单击按钮时,我运行以下将数据绑定到列表视图的代码:

private void btnUpload_Click(object sender,RoutedEventArgs e)
    {
        var btn = (Button)sender;
        var parentPanel = (StackPanel)btn.Parent;
        var cmb = parentPanel.FindChild<ComboBox>("ddlPaperType");

        TabItem currentTab = (TabItem)tabOrders.Items[tabOrders.SelectedIndex];
        var context = (TabContext)currentTab.DataContext;
        cmb.ItemsSource = context.paper_id;
        cmb.DisplayMemberPath = "name";
        cmb.SelectedValuePath = "_id";

        var order_number = context.item.order_number;
        var brand_id = context.item.brand_id._id;

        var parent = btn.Parent;
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Multiselect = true;
        List<UploadFile> images = new List<UploadFile>();
        ofd.Filter = "Image Files (*.bmp,*.jpg,*.jpeg,*.tif,*.tiff)|*.bmp; *.jpg; *.jpeg; *.tif; *.tiff|Photoshp Files (*.psd)|*.psd|Text Files (*.txt)|*.txt";
        if (ofd.ShowDialog() == true)
        {
            foreach (var item in ofd.FileNames)
            {
                images.Add(new UploadFile
                {
                    FileName = item,order_number = order_number,brand_id = brand_id,paper_id = context.paper_id
                });
            }
        }
        var lv = parent.GetParentObject().FindChild<ListView>("lvImages");
        lv.ItemsSource = images;
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)