Управление вкладками, как в браузере Chrome в приложении Silverlight

#c# #visual-studio-2010 #silverlight-4.0 #tabcontrol

#c# #visual-studio-2010 #silverlight-4.0 #tabcontrol

Вопрос:

Я уже видел это раньше. Нам нужен выделенный элемент вкладки с символом ‘ ‘ на нем. Как в браузере Chrome в приложении Silver Light.

В конце всегда появляется элемент tab, который наполовину виден, и как только вы нажимаете на него, он превращается в полноценный элемент tab.

Ответ №1:

Это было немного, хотя для ответа: P

Вот так:

Создайте класс с именем LinqToVisualTree. Вы можете найти его в конце этого поста вместе с объяснением того, что он делает. По сути, это позволяет вам запрашивать ваше визуальное дерево через LINQ.

Чтобы добавить что-либо в строку tabs в TabControl, вам нужно управлять TabPanel, которая содержит «кнопки» вкладок. Панель вкладок находится в системе.Windows.Элементы управления.Пространство имен примитивов, поэтому обратитесь к нему.

Самый простой способ получить TabPanel, который я нашел, — это назвать хотя бы один из ваших TabItems и сделать это:

 using System.Windows.Controls.Primitives;       // Contains TabPanel
using LinqToVisualTree;

void AddPlusButton() {
    // Creates a button beside the tabs
    var button = new Button()
    {
        Content = " ",
        IsTabStop = false      // To prevent keyboard press
    };

    // Links the Click with the "new tab" function
    button.Click  = new RoutedEventHandler(btPlus_Click);

    // *** HERE IS THE TRICK ***
    // Gets the parent TabPanel in the Visual Tree and cast it
    var tabpn = tabItem1.Ancestors<TabPanel>().FirstOrDefault() as TabPanel;

    // Links the button created
    tabpn.Children.Add(button);
}
  

Вот метод для кнопки «Плюс»:

 void btPlus_Click(object sender, RoutedEventArgs e)
{
    // Creates a new TabItem
    var ti = new TabItem();
    ti.Header = "TabAdded";
    ti.Content = new TextBlock() { Text = "Tab content!" };

    // Links it
    tabControl.Items.Add(ti);
}
  

Вот и все! Совет: Я только что узнал о классе TabPanel с помощью Silverlight Spy. Выполняя поиск в Google, я мог бы просто найти способы сделать это, изменив стиль шаблона из TabControl.

С наилучшими пожеланиями!

Комментарии:

1. спасибо за ваш ответ. вы используете сторонний инструмент, но не хотели бы с этим что-то делать. не могли бы вы подсказать какой-нибудь другой способ?

2. На самом деле, несмотря на то, что LinqToVisualTree является сторонним, это всего лишь «оболочка» для класса VisualTreeHelper , предоставляющая методы расширения для выполнения работы. Вы могли бы использовать VisualTreeHelper напрямую, но я думаю, что гораздо проще использовать методы расширения.