在列表视图中显示打开的TabItem名称

时间:2011-01-08 03:21:18

标签: c# wpf xaml listview binding

我正在尝试在列表视图或列表框中显示打开的标签名称列表(推荐?)。

经历了不同类型的绑定选项,我能够绑定到单个选项卡名称,但它显示垂直而不是水平。这是我的XAML:

<ListView DockPanel.Dock="Left"
          Height="352"
          Name="listView1"
          Width="132"
          ItemsSource="{Binding ElementName=RulesTab, Path=Name}"
          IsSynchronizedWithCurrentItem="True"
          FlowDirection="LeftToRight"
          HorizontalAlignment="Left"
          HorizontalContentAlignment="Left"
          DataContext="{Binding}">

任何指针都会非常受欢迎,因为我希望能够看到所有选项卡的列表打开,然后双击一个以使选项卡成为焦点。非常感谢!

3 个答案:

答案 0 :(得分:1)

简化示例如何使用listview枚举选项卡控件中的选项卡:

<TabControl Name="MyTabControl">
    <TabItem Header="Tab1">
    </TabItem>
    <TabItem Header="Tab2">
    </TabItem>
</TabControl>

<ListView  DockPanel.Dock="Left" 
           ItemsSource="{Binding ElementName=MyTabControl, Path=Items}" 
           DataContext="{Binding}">
          <ListView.ItemTemplate>
              <DataTemplate>
                  <TextBlock Text="{Binding Header}"></TextBlock>
              </DataTemplate>
          </ListView.ItemTemplate>
</ListView>

答案 1 :(得分:1)

我仍然不确定你到底想要什么,无论如何,如果需要,可以调整。 首先,如果绑定到特定项目,您将始终拥有一个项目,则需要将ItemsSource设置为集合。
假设您想要列出列表中所有标签的名称或标题,可以将标签控件的Items设置为ItemsSource,然后应用ItemTemplate,一些示例代码:

<ListBox ItemsSource="{Binding ElementName=TabControlSrc, Path=Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Header}" Margin="5"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

如果您不使用ItemTemplate,您将收到错误,因为同一项目只能是一位父母的视觉孩子。
坦率地说,这似乎有点无意义,因为它只是重申了你的标签,我误解了什么?如果是,请进一步澄清
编辑:哦哈哈,三个几乎相同的答案......

答案 2 :(得分:0)

以下是TabControlListBox的示例,其中显示了TabItems的名称:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TabControl Grid.Column="0" Name="tabControl1">
        <TabItem Header="Tab1"/>
        <TabItem Header="Tab2"/>
        <TabItem Header="Tab3"/>
        <TabItem Header="Tab4"/>
    </TabControl>
    <ListBox Grid.Column="1"  ItemsSource="{Binding Items, ElementName=tabControl1}">
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                <EventSetter Event="MouseDoubleClick" Handler="ListBoxItem_DoubleClick"/>
            </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Header}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

这是背后的代码:

private void ListBoxItem_DoubleClick(object sender, MouseButtonEventArgs mouseButtonEventArgs)
{
    var tabItem = (TabItem)((ListBoxItem)sender).Content;
    tabControl1.SelectedItem = tabItem;
}

已编辑以添加双击行为。