WPF DevComponents TabNavigation неспособность изменить SelectedIndex / Item в коде позади - PullRequest
0 голосов
/ 20 июля 2010

Я использую элемент управления DevComponents TabNavigation для WPF и могу добавить новый TabItem к TabNavigation по определенному индексу, назовите его i в коде позади. Теперь я хочу сделать новый TabItem SelectedItem, выполнив:

private void textBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    int i = createNewTabItem(0, "Foo");

    TabNavigation tn = (((sender as TextBlock).Parent as Grid).Parent as TabItem).Parent as TabNavigation;
    tn.SelectedItem = tn.Items[i];
}

private int createNewTabItem(int overflowSrcPageNum, String header)
{
    TabItem ti = new TabItem();
    ti.Header = header;
    tabNavigation.Items.Insert(overflowSrcPageNum + 1, ti);
    return overflowSrcPageNum + 1;
}

Однако, когда я запускаю этот код, вместо того, чтобы новый TabItem отображался, он отображается, а затем исходная вкладка, на которой я находился, быстро возвращается к виду.

Если у кого-то есть идеи относительно того, почему это происходит, и как я могу это исправить, пожалуйста, дайте мне знать. Я приложил образец XAML ниже:

    <Grid >
        <Grid.Resources>
            <ResourceDictionary>
                <Style TargetType="TextBlock">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="TextDecorations" Value="Underline"></Setter>
                        </Trigger>
                    </Style.Triggers>
                    <Setter Property="Foreground" Value="White" />
                    <Setter Property="FontFamily" Value="Segoe UI" />
                    <Setter Property="FontSize" Value="11" />
                    <Setter Property="FontWeight" Value="Bold" />
                    <Setter Property="HorizontalAlignment" Value="Right" />
                    <Setter Property="Text" Value="View More..." />
                    <Setter Property="Visibility" Value="Visible" />
                    <EventSetter Event="MouseLeftButtonDown" Handler="lblMoreCpartys_MouseLeftButtonDown" />
                </Style>
            </ResourceDictionary>
        </Grid.Resources>
        <my:TabNavigation Background="Black" HorizontalAlignment="Stretch" Margin="0" Name="tabNavigation" 
                      VerticalAlignment="Stretch" MouseLeftButtonDown="tabNavigation_MouseLeftButtonDown"   
                      FontSize="12" Foreground="SteelBlue" ForceCursor="True" MouseWheel="tabNavigation_MouseWheel"
                      TabStripPlacement="Bottom">
            <TabItem Header="ITEM 1" Name="firstTabItem" FontSize="12" >
                    <TextBlock Name="firstTB" />
            </TabItem>
            <TabItem Header="ITEM 2" Name="secondTabItem" FontSize="12" >
                    <TextBlock Name="secondTB" />
            </TabItem>
        </my:TabNavigation>
    </grid>

Заранее спасибо.

1 Ответ

0 голосов
/ 20 июля 2010

Попробуйте установить e. Обрабатывается в значение True в textBlock_MouseLeftButtonDown.

Я не знаком с этим элементом управления, но если он работает как TabControl, то у него есть логика для отображения вкладки при нажатии.Эта логика видит, что исходная вкладка была нажата, и возвращает ее обратно после изменения.Если пометить объект EventArgs как обработанный, WPF не сможет вызывать обработчики событий для родительских элементов, что не позволит вкладке переключиться обратно.

...