Показать открытые имена элементов TabItem в представлении списка - PullRequest
1 голос
/ 08 января 2011

Я пытаюсь отобразить список имен открытых вкладок в виде списка или списка (рекомендации?).

Проходил различные типы привязки, и я могу привязать имя одной вкладки, но оно отображается по горизонтали, а не по горизонтали. Вот мой 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 ]

1 голос
/ 08 января 2011

Упрощенный пример перечисления вкладок в элементе управления вкладками со списком:

<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 голос
/ 08 января 2011

Я все еще не уверен относительно того, что именно вы хотите, во всяком случае, это может быть скорректировано при необходимости.Прежде всего, если вы привязываете к определенному элементу, у вас всегда будет один элемент, вам нужно установить 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, вы получите ошибку, поскольку этот же элемент может быть только визуальным потомком одного из родителей.Честно говоря, это кажется немного бессмысленным, так как оно просто повторяет ваши вкладки, я что-то не так понял?Если это так, пожалуйста, уточните.Редактировать: О, лол, три почти идентичных ответа ...

0 голосов
/ 08 января 2011

Вот пример TabControl и ListBox, показывающих имена 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;
}

Отредактировано для добавления поведения двойного щелчка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...