You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发VS2022 WPF扩展:如何自定义工具窗口搜索控件位置?

在VS2022 WPF工具窗口中自定义VS标准搜索控件的位置

要将VS原生搜索控件嵌入到自定义UserControl的Grid单元格中,而非使用默认的顶部铺满布局,你需要直接使用VS提供的SearchControl控件,而非依赖ToolWindowPane的默认搜索框架,具体步骤如下:

1. 添加必要引用

在你的扩展项目中引用Microsoft.VisualStudio.SearchControl.dll,以及适配VS2022的VS Shell SDK程序集(如Microsoft.VisualStudio.Shell.17.0.dll)。

2. 在XAML中嵌入SearchControl

在自定义UserControl的XAML中添加VS搜索控件的命名空间,然后将SearchControl直接放到Grid的目标单元格内,像普通WPF控件一样设置布局属性:

<UserControl x:Class="YourExtensionNamespace.YourToolWindowControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:vs="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.SearchControl">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="200"/>
        </Grid.ColumnDefinitions>

        <!-- 自定义位置的VS搜索控件:放在第1行第2列 -->
        <vs:SearchControl x:Name="CustomVsSearch"
                          Grid.Row="0"
                          Grid.Column="1"
                          SearchWatermark="搜索内容..."
                          ShowClearButton="True"
                          Margin="5"/>

        <!-- 其他业务控件 -->
        <ListView Grid.Row="1" Grid.ColumnSpan="2" x:Name="ResultList"/>
    </Grid>
</UserControl>

3. 绑定搜索逻辑

在UserControl的后台代码中处理Search事件,实现具体的搜索功能:

using Microsoft.VisualStudio.PlatformUI;
using System.Windows.Controls;

namespace YourExtensionNamespace
{
    public partial class YourToolWindowControl : UserControl
    {
        public YourToolWindowControl()
        {
            InitializeComponent();
            CustomVsSearch.Search += OnSearchTriggered;
        }

        private void OnSearchTriggered(object sender, SearchEventArgs e)
        {
            // 获取搜索关键词
            string query = e.Query;
            
            // 这里执行你的搜索逻辑,比如更新ResultList的数据源
            // ResultList.ItemsSource = YourSearchMethod(query);
        }
    }
}

4. 禁用ToolWindowPane默认搜索

确保你的ToolWindowPane类不要重写SearchEnabled、SearchCategories等与默认搜索相关的属性,避免默认的顶部搜索栏出现:

using Microsoft.VisualStudio.Shell;

namespace YourExtensionNamespace
{
    [ToolWindowPaneRegistration(typeof(YourToolWindow), Caption = "自定义工具窗口")]
    public class YourToolWindow : ToolWindowPane
    {
        public YourToolWindow() : base(null)
        {
            Content = new YourToolWindowControl();
        }
    }
}

注意事项

  • SearchControl会自动适配VS的主题(浅色/深色/高对比度),无需额外处理样式兼容;
  • 可通过SearchControl的属性自定义搜索提示文本、清除按钮显示状态、输入框样式等;
  • 若需要支持复杂搜索场景(如多类别筛选、实时搜索),可监听TextChanged事件或绑定SearchCommand命令实现。

内容的提问来源于stack exchange,提问作者NirMH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:27:45