如何通过绑定填充ContentPresenter

本文关键字:ContentPresenter 填充 绑定 何通过 | 更新日期: 2023-09-27 18:03:53

连接有问题

我开始将我的tabstabcontrol.ressources连接起来,它可以显示每个制表符的文本。然后我想为我的TabItems有一个卷轴,它不起作用,没有显示在标签中…我甚至不能再使用tabcontrol.ressources了…

<DockPanel>
    <Button Background="DarkGoldenrod" Height="Auto" Command="{Binding OpenFlyoutDataCommand}">
        <StackPanel>
            <materialDesign:PackIcon Kind="ArrowRightBoldCircleOutline" Width="30" Height="30"/>
        </StackPanel>
    </Button>
    <TabControl ItemsSource="{Binding TabEDCWaferData, Mode=TwoWay}" 
                SelectedItem="{Binding SelectedTabEDCWaferData}">
        <!-- Used to create a scroolbar for tabitems -->
        <TabControl.Template>
            <ControlTemplate TargetType="TabControl">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <ScrollViewer HorizontalScrollBarVisibility="Auto"  VerticalScrollBarVisibility="Hidden" >
                        <TabPanel Grid.Column="0" Grid.Row="0"
                                  Margin="2,2,2,0" IsItemsHost="true"/>
                    </ScrollViewer>
                    <ContentPresenter ContentSource="..."/>
                </Grid>
            </ControlTemplate>
        </TabControl.Template>
        <!-- Contains the text in the tab item ! -->
        <TabControl.Resources>
            <DataTemplate DataType="TabItem">
                <DockPanel>
                    <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Content}" />
                </DockPanel>
            </DataTemplate>
        </TabControl.Resources>
    </TabControl>
</DockPanel>

这是连接到TabItem的集合,在那里我有一个函数来添加Items绑定到另一个按钮。

    private ObservableCollection<TabItem> _TabEDCWaferData;
    public ObservableCollection<TabItem> TabEDCWaferData
    {
        get { return _TabEDCWaferData; }
        set
        {
            _TabEDCWaferData = value;
            RaisePropertyChanged("TabEDCWaferData");
        }
    }
    public void AddTabItem(string name)
    {
        TabItem tab = new TabItem();
        tab.Header = name;
        tab.Content = "Temporary content";
        TabEDCWaferData.Add(tab);
    }

我读到我必须使用ContentPresenter,但我不知道如何绑定它。我认为这不是工作与TabItems…我只是想通过使用ContentPresenter来绑定它,就像我在Ressources中做的那样。

我希望我说得够清楚了!由于

EDIT:我尝试在ContentPresenter中显示我在函数' AddTabItem中添加的选定项目选项卡内容。

如何通过绑定填充ContentPresenter

对于ContentPresenter,,大多数情况下,这可以完成工作:

 <ContentPresenter />

默认ContentSource"Content"。这意味着它将查看模板化父元素的Content属性,并将在那里找到的任何内容作为自己的内容。

但是这根本没有帮助,而且你没有可以使用ContentPresenter;这只是为了方便。在本例中,您想要呈现的内容是SelectedItem.Content,它不是ContentPresenter的有效ContentSource。但是你也可以在ContentControl上做同样的事情:

<TabControl.Template>
    <ControlTemplate TargetType="TabControl">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition />
            </Grid.RowDefinitions>
            <ScrollViewer 
                Grid.Row="0"
                HorizontalScrollBarVisibility="Auto"  
                VerticalScrollBarVisibility="Hidden" 
                >
                <TabPanel 
                    Grid.Column="0" 
                    Margin="2,2,2,0" IsItemsHost="true"/>
            </ScrollViewer>
            <ContentControl
                Grid.Row="1"
                Content="{Binding SelectedItem.Content, RelativeSource={RelativeSource TemplatedParent}}"
                />
        </Grid>
    </ControlTemplate>
</TabControl.Template>

TemplateBinding是不会工作与Path,如" selecteitem . content ";它只接受模板化父组件上的属性名称。我也固定了你的Grid.Row属性。

同样,您也可以将TabControl.Resources中的DataTemplate删除为TabItem。这不是DataTemplate的目的;您使用datatemplate为视图模型类定义可视化表示,但TabItem是一个控件。它已经知道如何显示自己,事实上DataTemplate被忽略了,所以最好不要把它留在那里;你只会浪费时间去修改它,并试图找出为什么它没有任何效果。没有它,您的TabItem将正确显示。

试试这样做?

<ContentPresenter Content="{TemplateBinding Content}" />

编辑

<ContentPresenter x:Name="PART_SelectedContentHost"  ContentSource="SelectedContent" />
相关文章:
  • 没有找到相关文章