如何在 wpf c# 中单击按钮时打开 window 中的特定部分

how to open specific section in window on button click in wpf c#

我想在点击另一个 window 的按钮时打开一个 window,然后转到那个 window 中的特定选项卡。假设新 window (tabsWindow) 有 3 个选项卡 - tab1、tab2 和 tab3,我在主 window (buttonsWindow) btn1、btn2 和 btn3 上有 3 个按钮。所有三个选项卡都在一个 window 上,所有三个按钮都在另一个 window 上。单击 btn1 时,应从 tabsWindow 打开 tab1。在 btn2_Click,tab2 应该打开。我听说过 RoutedCommand 但并不擅长。给我建议任何其他可能或更简单的方法。

我使用 MVVM 模式制作了一个玩具样本。
您可以在 GitHub.

中查看完整源代码

ButtonsWindow.xaml

我用了Command,把Button对象交给了CommandParameter给使用 Button.

Content 指定 TabControlSelectedIndex
<UniformGrid Columns="3">
    <Button Margin="50" Content="1" Command="{Binding BtnClick}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>
    <Button Margin="50" Content="2" Command="{Binding BtnClick}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>
    <Button Margin="50" Content="3" Command="{Binding BtnClick}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}"/>
</UniformGrid>

TabsWindow.xaml

<Grid>
    <TabControl x:Name="tab" Width="300" Height="300">
        <TabItem Header="Tab1">
            <TextBlock TextAlignment="Center" VerticalAlignment="Center" Text="Tab1" FontSize="20" />
        </TabItem>
        <TabItem Header="Tab2">
            <TextBlock TextAlignment="Center" VerticalAlignment="Center" Text="Tab2" FontSize="20" />
        </TabItem>
        <TabItem Header="Tab3">
            <TextBlock TextAlignment="Center" VerticalAlignment="Center" Text="Tab3" FontSize="20" />
        </TabItem>
    </TabControl>
</Grid>

TabsWindow.xaml.cs

public partial class TabsWindow : Window
{
    public TabsWindow()
    {
        InitializeComponent();
    }

    internal void SetTab(string content)
    {
        tab.SelectedIndex = int.Parse(content) - 1;
    }
}

MainViewModel.cs

public class MainViewModel
{
    private TabsWindow win;
    public ICommand BtnClick { get; set; }

    public MainViewModel()
    {
        BtnClick = new RelayCommand<object>(Click);
    }

    private void Click(object obj)
    {
        if (obj is Button btn)
        {
            if (win is null || !win.IsVisible)
            { 
                win = new TabsWindow();
                win.Show();
            }
            win.SetTab(btn.Content.ToString());
        }
    }
}

单击 Button 时,TabsWindow 将被激活并根据 ButtonContent 移动到特定选项卡。此外,如果 TabsWindow 已激活,则可以移动选项卡而不显示新的 TabsWindow