小编Sha*_*ron的帖子

如何使Microsoft.VisualStudio.Diagnostics.UI.Controls.MultiSelectComboBox工作

我想要实现的目标:

我正在开发一个Visual Studio插件,我需要一个MultiSelectComboBox.我想要适应VisualStudio的外观和感觉,所以使用自己的类似乎是个好主意:

公共类MultiSelectComboBox:UserControl,IComponentConnector,IStyleConnector
名称:Microsoft.VisualStudio.Diagnostics.UI.Controls.MultiSelectComboBox
程序集:Microsoft.VisualStudio.Diagnostics.Common,Version = 12.0.0.0

Microsoft在其"代码分析"页面中使用此类:查看/其他Windows /代码分析.

问题:

当然,当我想使用它时,它就无法正常工作.:)

这是我使用它的示例代码:

public TestClass()
{
    InitializeComponent();
    multiSelectComboBox.ItemsSource = new string[] { "Item 1", "Item 2", "Item 3" };
    multiSelectComboBox.AllItemsText = "All items";
}
Run Code Online (Sandbox Code Playgroud)

这是XAML标记:

<UserControl ...
    xmlns:vsUiControls="clr-namespace:Microsoft.VisualStudio.Diagnostics.UI.Controls;assembly=Microsoft.VisualStudio.Diagnostics.Common"
    ...>
    <vsUiControls:MultiSelectComboBox x:Name="multiSelectComboBox"/>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

现在出现MultiSelectComboBox并且您可以与它进行交互,但是,当您选择一些项目时,但不是全部,项目应该显示如下:( Item 1; Item 3假设您选择了除项目2之外的所有项目).但是,显示的文本只是Item 1Item 3完全没有分隔符.

有趣的事情(我已经忽略了很长一段时间)是,如果你调试你的代码并要求multiSelectComboBox.SelectedItemsText它返回用分号分隔的正确值.

所以问题是,如果值存储正确,为什么在我的代码中使用它时它没有正确显示,但是当微软在代码分析页面上使用时呢?

描述MultiSelectComboBox样式的XAML标记只包含SelectedItemsText的一个实例,它是一个绑定.请看下面我从.Net Reflector获得的内容如下:

<local:MultiSelectComboBox
    p1:UserControl.Name="_this"
    p1:AutomationProperties.Name="{Binding RelativeSource={RelativeSource Self},Path=AllItemsText}"
    xmlns:p1="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:local="clr-namespace:Microsoft.VisualStudio.Diagnostics.UI.Controls;assembly=Microsoft.VisualStudio.Diagnostics.Common,Version=12.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a">
    ...
    <Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
        <local:CheckComboBox
            CheckComboBox.Name="_comboBox" …
Run Code Online (Sandbox Code Playgroud)

c# wpf visual-studio

10
推荐指数
1
解决办法
110
查看次数

创建Visual Studio主题特定语法突出显示

我想在Visual Studio 2012(及更高版本)创建一个支持不同主题(黑暗,浅色,蓝色)的语法荧光笔.

Visual Studio的编辑器分类器项目模板说明了如何使用环境创建自己的颜色Microsoft.VisualStudio.Text.Classification.ClassificationFormatDefinition.它工作正常......

...直到您意识到Visual Studio 2012(及更高版本)中存在不同的主题,并且您并不真正支持它们.在黑暗的主题环境中,浅色主题上漂亮的深蓝色标识符变得难以辨认.

根据我的理解,如果您在给定主题(例如:Light)中的工具/选项/字体和颜色中更改ClassificationFormatDefinition,它将不会影响不同主题中的相同ClassificationFormatDefinition(例如:Dark).颜色似乎在不同的主题上是独立的.

那很好.但是我如何实现定义在所有主题中具有相同名称的相同ClassificationFormatDefinition(例如:MyKeywords),但为它们提供不同的颜色?就像Visual Studio自己的"标识符"一样,它在Light主题上是默认的黑色,在黑色主题上是默认的.

我知道这个Microsoft.VisualStudio.PlatformUI.VSColorTheme.ThemeChanged事件可以让我在更改颜色主题时收到通知.我是否必须使用它并以某种方式获取我现有的ClassificationFormatDefinition并根据新主题为它们分配新颜色?但这也提出了一个问题:这些修改后的颜色是否会持久保存到环境中,即如果我重新启动Visual Studio,下次在所有不同的主题中我的更改是否会存在.

我没有找到任何属性来说明ClassificationFormatDefinition支持哪个主题,也没有找到关于这个主题的非常有用的文章.

任何帮助赞赏.

syntax-highlighting vspackage visual-studio visual-studio-extensions visual-studio-2012

9
推荐指数
1
解决办法
1165
查看次数

动态显示工具栏上的自定义Visual Studio VSPackage命令

假设我们在工具栏上有一个带工具栏和几个命令的VSPackage.如何以编程方式显示/隐藏工具栏上的其中一个命令?如果您是用户,则可以通过自定义工具栏来执行此操作.因此,我强烈认为必须有一种方法可以从代码中执行此操作.

由于我们没有开发AddIn,我们无法使用 DTE.Commands.AddNamedCommand(AddInInstance, Name, ButtonText, ToolTip, MSOButton).

没关系,因为我们仍然可以使用Visual Studio命令表(.vsct)格式定义命令,这是VSPackages的建议方法:

<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <Extern href="vsshlids.h" />

  <Commands package="testPackage">

    <Menus>  <!-- Define the menus, toolbars, etc. -->
      <Menu guid="commands" id="toolbar" type="Toolbar">
        <Parent guid="guidSHLMainMenu" id="IDG_VS_BUILD_SOLUTION" />
        <CommandFlag>DefaultDocked</CommandFlag>
        <Strings>
          <ButtonText>TestToolbar</ButtonText>
        </Strings>
      </Menu>
    </Menus>

    <Groups>  <!-- Define the groups for commands -->
      <Group guid="commands" id="toolbarGroup" priority="0x0001">
        <Parent guid="commands" id="toolbar" />
      </Group>
    </Groups>

    <Buttons>  <!-- Define the commands as buttons -->
      <Button guid="commands" id="button0" type="Button">
        <Parent guid="commands" id="toolbarGroup" …
Run Code Online (Sandbox Code Playgroud)

c# toolbar vspackage visual-studio

7
推荐指数
1
解决办法
2377
查看次数

了解AppHangB1事件和挂起类型

我有一个游戏经常挂起。当发生挂起时,它会切换回 Windows 桌面,并且无法再次返回到前面。剩下要做的就是通过任务管理器(或taskkill等)关闭它

从事件查看器中我可以挖掘以下应用程序手动事件描述:

Problem signature:
Problem Event Name: AppHangB1
Application Name:   [It does not matter at this point]
Application Version:    0.9.14.0
Application Timestamp:  56d56d8f
Hang Signature: 45f9
Hang Type:  2048
OS Version: 6.1.7601.2.1.0.256.1
Locale ID:  1033
Additional Hang Signature 1:    45f925d9ade4d1a06157e0757d709b29
Additional Hang Signature 2:    a6bb
Additional Hang Signature 3:    a6bb9b65a991c52828e98b8adc752872
Additional Hang Signature 4:    45f9
Additional Hang Signature 5:    45f925d9ade4d1a06157e0757d709b29
Additional Hang Signature 6:    a6bb
Additional Hang Signature 7:    a6bb9b65a991c52828e98b8adc752872
Run Code Online (Sandbox Code Playgroud)

问题:有谁知道悬挂类型悬挂签名是什么?经过一些谷歌搜索后,我找不到任何解释不同挂起类型的结果。

注意:请不要告诉我联系游戏开发者,我已经这样做了,但他们并没有真正的帮助。我想弄清楚这个挂起是否与我的硬件或他们的代码中的错误有关。

是的,我知道是他们的代码运行挂起,但这是否是由于我的硬件行为不当、驱动程序错误或实际上只是游戏代码中的错误所致。

c++

7
推荐指数
0
解决办法
2307
查看次数

在解决方案文件上调用自定义 MSBuild 目标

我有一个解决方案文件 ( MySolution.sln ),其中包含一个项目 ( MyProject.vcxproj )。我想通过解决方案在我的项目上执行自定义目标 ( MyCustomTarget )。它看起来像这样:

msbuild MySolution.sln /t:MyCustomTarget
Run Code Online (Sandbox Code Playgroud)

当我执行命令时,我会收到一条错误消息:

MySolution.sln.metaproj:错误 MSB4057:项目中不存在目标“MyCustomTarget”。[MySolution.sln]

您可以将MyCustomTarget替换为 Microsoft.Cpp.Win32.targets 中的任何标准目标(例如:ClCompile、Link)或您从 MyProject.vcxproj 中的 .targets 文件中选择的任何其他目标。他们都不会工作。

当环境变量msbuildemitsolution设置为 1 时,我可以检查生成的MySolution.sln.metaproj文件。在底部指定了 4 个目标:构建、重建、清理和发布。使用这些目标而不是MyCustomTarget,项目构建正常。此外,如果我指定项目文件而不是解决方案文件,它也会构建:

msbuild MyProject.vcxproj /t:MyCustomTarget
Run Code Online (Sandbox Code Playgroud)

但是使用这种格式,我将失去OutDir属性,必须手动设置ConfigurationPlatform,所以我失去了拥有解决方案文件的好处。

有什么方法可以将我的自定义目标与我最初打算的解决方案文件一起使用吗?

据我了解,问题是 msbuild 生成了这个中间项目文件(mysolution.sln.metproj),但这将赢得来自MyProject.vcxproj的导入,包括 .targets 文件。难怪MyCustomTarget不被识别。

我目前的解决方法是将项目文件与 msbuild 一起使用,并尽量不要错过解决方案文件中的任何内容:

msbuild MyProject.vcxproj /t:MyCustomTarget /p:Configuration=MyConfig;Platform=MyPlatform;OutDir=MySolution\Platform_MyConfig\
Run Code Online (Sandbox Code Playgroud)

但这不是一个合适的解决方案,不灵活,容易出错,并且不会自动适应解决方案文件中的更改。

msbuild project solution target

5
推荐指数
1
解决办法
2581
查看次数