1

在 Visual Studio 扩展包中,我想创建一个工具窗口(如解决方案资源管理器是一个工具窗口)并在此工具窗口中使用工具栏(如解决方案资源管理器有它自己的工具栏,带有“显示所有文件”“刷新”等)。

见截图

如果我的 ToolWindow 处于活动状态,则会为工具栏上的命令显示工具提示。如果任何其他工具窗口处于活动状态,则不会显示它们。

然而,在解决方案资源管理器中,无论工具窗口是否处于活动状态,都会显示工具提示。

单击工具栏项也是如此。即使解决方案资源管理器不是活动的工具窗口,也可以一键单击解决方案资源管理器工具栏项。

如果我的 ToolWindow 不是活动的 ToolWindow,则第一次单击会激活我的 ToolWindow,并且只有第二次单击会单击该按钮。

有谁知道如何在自定义 ToolWindows 中实现类似解决方案资源管理器行为的行为?

谢谢-M。

<UserControl x:Class="mklein.TestToolWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:vsfx="clr-namespace:Microsoft.VisualStudio.Shell;assembly=Microsoft.VisualStudio.Shell.10.0" mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300" Name="MyToolWindow"
             Background="{DynamicResource {x:Static vsfx:VsBrushes.ToolWindowBackgroundKey}}" >

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>

        <ToolBar Grid.Row="0"  Background="{DynamicResource {x:Static vsfx:VsBrushes.CommandBarGradientKey}}">
            <ToolBar.Items>
                <Button Command="SaveAs" ToolTip="Save new">
                    <Image Source="resources\add.png" />
                </Button>
                <!-- ... -->
            </ToolBar.Items>
        </ToolBar>

        <ListBox Grid.Row="1" x:Name="ListboxSettings"                   
                     ItemsSource="{Binding}" 
                     IsSynchronizedWithCurrentItem="True" 
                     MouseDoubleClick="ListBox_MouseDoubleClick">

        </ListBox>
    </Grid>
</UserControl>
4

1 回答 1

2

这是因为您正在创建 WPF 工具栏,而不是本机 Visual Studio 工具栏(通过 VSCT 文件完成)。

看看这个示例,演示如何托管一个带有 Visual Studio 命令的“本机”工具栏。这是在工具窗口中的 Visual Studio 中创建新命令或重用现有命令的推荐方法。这也允许用户自定义命令并指定他们自己的键绑定。

于 2011-05-30T05:26:59.333 回答