Установка стиля для первого и последнего видимого TabItem в TabControl - PullRequest
5 голосов
/ 15 октября 2008

Я хочу установить стиль для первой и последней вкладок TabItems в TabControl и обновлять их при изменении видимости элементов TabItems. Я не вижу способа сделать это с помощью триггеров.

То, что мы ищем, выглядит так:

| > > > |

И видимость TabItems определяется связыванием.

У меня это работает в коде. На TabItem видимость изменилась, перечислите через TabItems, пока не найдете первый видимый. Установите стиль на этом. Для всех других видимых элементов TabIms установите для них стиль заострения (чтобы ранее первый видимый стиль стал заостренным). Затем начните с конца, пока не найдете видимый элемент TabItem и установите последний стиль для него. (Это также позволяет нам решить проблему с TabControl, где он будет отображать содержимое невидимого TabItem, если не выбран ни один из видимых TabItems.)

Несомненно, я мог бы внести улучшения в свой метод, но я не уверен, что это правильный подход.

Как бы вы подошли к этому?

Ответы [ 3 ]

1 голос
/ 17 октября 2008

Обратите внимание, что видимость наших TabItems не будет затронута во время просмотра TabControl, поэтому мы можем применять стили только при изменении видимости TabControl.

private void Breadcrumb_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
        if ((bool)e.NewValue)
        {
            if (sender is TabControl)
            {
                TabControl tabControl = (TabControl)sender;
                int firstVisible = -1;

                for (int i = 0; i  -1) //if is -1, they're all invisible
                    {

                        for (int i = tabControl.Items.Count - 1; i > firstVisible; i--)
                        {
                            TabItem tabItem = (TabItem)tabControl.Items[i];
                            if (tabItem.Visibility == Visibility.Visible)
                            {

                                tabItem.Style = (Style)FindResource("LastBreadcrumbTabItem");
                                break;

                            }
                        }
                    }
                }
            }
        }
1 голос
/ 15 октября 2008

Извините, вы можете объяснить это немного лучше, пока я интерпретировал ваш вопрос так:

Применить определенный стиль, когда видимость изменяется на элементах вкладок в начале и в конце элемента управления вкладками - то есть, если он прокручивается вне поля зрения, то изменить стиль?

Если это так, тогда, когда вы добавляете ваши TabItems (программно или в wpf), вам нужно будет реализовать обработчик событий IsVisibleChanged для TabItems, которые вы хотите обработать (т.е. первый и последний или все?)

    public Window1()
    {
        InitializeComponent();

        this.myTabItem.IsVisibleChanged += new DependencyPropertyChangedEventHandler(myTabItem_IsVisibleChanged);
    }

    private void myTabItem_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        myTabControl.Items[0].Style = FindResource("MyTabItemStyle") as Style;
    }

Это просто, если вы программно добавляете элементы табуляции в свой элемент управления ...:)

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

Я взял управление табулатурой silverlight и сделал прокрутку таблиц. вот ссылка на пост. Я думаю, это то, что вы ищете.

http://www.dansoltesz.com/post/2010/07/20/Silverlight-tabcontrol-with-scrollable-tabItems.aspx

...