Как изменить выбранную вкладку на кнопке нажмите в WPF TabControl с кнопками в заголовке
у меня есть WPF TabControl
это имеет пару кнопок в TabItem
заголовок.
Я хочу, чтобы выбранная вкладка менялась при нажатии кнопки с заголовком. Здесь
является фрагментом кода:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<TabControl>
<TabItem Content="Item 1 Content">
<TabItem.Header>
<StackPanel Orientation="Vertical">
<TextBlock FontSize="14" FontWeight="Bold" Text="Item1"/>
<StackPanel Orientation="Horizontal">
<Button Content="Action 1"/>
<Button Content="Action 2"/>
</StackPanel>
</StackPanel>
</TabItem.Header>
</TabItem>
<TabItem Content="Item 2 Content">
<TabItem.Header>
<StackPanel Orientation="Vertical">
<TextBlock FontSize="14" FontWeight="Bold" Text="Item2"/>
<StackPanel Orientation="Horizontal">
<Button Content="Action 1"/>
<Button Content="Action 2"/>
</StackPanel>
</StackPanel>
</TabItem.Header>
</TabItem>
</TabControl>
</Grid>
</Page>
этот образец показывает пару Tab
s. Вкладка выбирается при щелчке фона заголовка, однако при нажатии кнопки вкладка не выбирается. Я хочу, чтобы кнопка приняла щелчок, но я также хочу, чтобы вкладка, соответствующая кнопке, была выбрана. Может кто-нибудь помочь?
спасибо, Hitesh
2 ответов
мы можем сделать это с помощью Маршрутизация Событие. RoutedEvents, например, Click будет пузыриться дерево элементов, пока что-то не обработает событие. Из-за этого вы фактически уже получаете событие Click на элементах вкладки, мы просто еще ничего не делаем с ним. Мы могли бы создать событие для обработки кнопки нажмите на элементы вкладки, как это:
<TabItem Content="Item 1 Content" ButtonBase.Click="TabItem_Click">
однако мы должны установить это на каждой вкладке, поэтому вместо этого мы можем создать стиль для TabItems в TabControl так:
<TabControl>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<EventSetter Event="ButtonBase.Click"
Handler="TabItem_Click" />
</Style>
</TabControl.ItemContainerStyle>
....
</TabControl>
Теперь в нашем обработчике событий мы можем выбрать вкладку, которая была нажата:
private void TabItem_Click(object sender, RoutedEventArgs e)
{
Trace.WriteLine("TabItemClicked");
((TabItem)sender).IsSelected = true;
e.Handled = true;
}
Я делал немного RnD по вышеуказанной проблеме прямо сейчас и смог достичь вышеуказанного по-другому, но все же было бы здорово, если бы u мог помочь мне в том, как U HV выполнил.
в событии selectionchanged listbox я только что изменил selecteditem элемента управления tab на тот, который я хочу, т. е.
Tbctrl.SelectedItem = (TabItem)Tbctrl.FindName("item2");
здесь Tbctrl-это имя tabcontrol, а item2-имя tabitem в tabcontrol, который содержит упомянутые текстовые поля выше.
С уважением,
Даваль