#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 напрямую, но я думаю, что гораздо проще использовать методы расширения.