如何更改按钮上的选定选项卡单击WPF TabControl与标题中的按钮

Hit*_*shP 10 wpf tabcontrol selecteditem

我有一个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>
Run Code Online (Sandbox Code Playgroud)

此示例显示了几个Tabs.如果单击标题背景,则选择选项卡,但是,如果单击按钮,则不会选择选项卡.我希望按钮接受点击,但我也希望选中与该按钮对应的选项卡.有人可以帮忙吗?

谢谢,Hitesh

rmo*_*ore 10

我们可以使用事件路由来完成此操作. RoutedEvents(例如Click)会冒泡元素树,直到处理事件.因此,您实际上已经在选项卡项上收到了Click事件,我们还没有做任何事情.我们可以创建一个事件来处理按钮单击选项卡项,如下所示:

<TabItem Content="Item 1 Content" ButtonBase.Click="TabItem_Click">
Run Code Online (Sandbox Code Playgroud)

但是,我们必须在每个选项卡上设置它,所以我们可以在TabControl中为TabItem创建一个样式,如下所示:

<TabControl>
    <TabControl.ItemContainerStyle>
        <Style TargetType="{x:Type TabItem}">
            <EventSetter Event="ButtonBase.Click"
                         Handler="TabItem_Click" />
        </Style>
    </TabControl.ItemContainerStyle>
....
</TabControl>
Run Code Online (Sandbox Code Playgroud)

现在,在我们的事件处理程序中,我们可以选择已单击的选项卡:

private void TabItem_Click(object sender, RoutedEventArgs e)
{
    Trace.WriteLine("TabItemClicked");
    ((TabItem)sender).IsSelected = true;
    e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我对上述问题做一个小的RND现在,并能达到上述以不同的方式,但它仍然将是巨大的,如果ü可以帮助我以U HV执行方式.

在列表框的selectionchanged事件上,我只是将选项卡控件的selecteditem更改为我想要的那个ie

            Tbctrl.SelectedItem = (TabItem)Tbctrl.FindName("item2");
Run Code Online (Sandbox Code Playgroud)

这里Tbctrl是tabcontrol的名称,item2是tabcontrol中tabitem的名称,它包含上面提到的文本框.

问候,

Dhaval