2016-12-29 48 views
1

有谁知道如何在Visual Studio toolwindow中正确地设置WPF ListView的样式,以便它能正确响应活动的Visual Studio主题?如何将Visual Studio主题应用于WPF ListView?

我想实现像在VS任务列表工具窗口:

Visual Studio Task List Window

我发现这种风格VsResourceKeys.ThemedDialogListViewItemGridStyleKey但它不会产生这样的事情。

这是我取得了迄今:

Current ListView with bad style

几乎所有的东西是错误的:

  • 网格视图头部是灰色的,它应该是黑色的。
  • 网格视图列标题文本是黑色的,它应该是白色的。
  • 项目未被选中时项目文本为蓝色,并且应为白色。
  • 等等

列表视图在XAML定义如下:

<ListView 
    x:Name="listDetails" 
    Grid.Row="4" 
    Height="150" 
    Style="{StaticResource ResourceKey={x:Static theming:StyleKeys.ThemedListViewDefaultStyleKey}}" 
    > 
    <ListView.View> 
     <GridView> 
      <GridViewColumn 
       Header="Property" 
       Width="150" 
       DisplayMemberBinding="{Binding PropertyName}" 
       HeaderContainerStyle="{StaticResource ResourceKey={x:Static theming:StyleKeys.ThemedListViewGridViewColumnHeaderDefaultStyleKey}}" 
       /> 
      <GridViewColumn 
       Header="Type" 
       Width="150" 
       DisplayMemberBinding="{Binding TypeName}" 
       HeaderContainerStyle="{StaticResource ResourceKey={x:Static theming:StyleKeys.ThemedListViewGridViewColumnHeaderDefaultStyleKey}}" 
       /> 
      <GridViewColumn 
       Header="Left Value" 
       Width="150" 
       DisplayMemberBinding="{Binding LeftValue}" 
       HeaderContainerStyle="{StaticResource ResourceKey={x:Static theming:StyleKeys.ThemedListViewGridViewColumnHeaderDefaultStyleKey}}" 
       /> 
      <GridViewColumn 
       Header="Right Value" 
       Width="150" 
       DisplayMemberBinding="{Binding RightValue}" 
       HeaderContainerStyle="{StaticResource ResourceKey={x:Static theming:StyleKeys.ThemedListViewGridViewColumnHeaderDefaultStyleKey}}" 
       /> 
     </GridView> 
    </ListView.View> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource ResourceKey={x:Static theming:StyleKeys.ThemedListViewItemDefaultStyleKey}}" /> 
    </ListView.ItemContainerStyle> 
</ListView> 

的风格定义如下:

<Style 
    x:Key="{x:Static theming:StyleKeys.ThemedListViewDefaultStyleKey}" 
    TargetType="{x:Type ListView}" 
    > 
    <Setter Property="Background" Value="{DynamicResource {x:Static vsui:EnvironmentColors.ToolWindowBackgroundBrushKey}}" /> 
    <Setter Property="BorderThickness" Value="0" /> 
</Style> 

<Style 
    x:Key="{x:Static theming:StyleKeys.ThemedListViewItemDefaultStyleKey}" 
    TargetType="{x:Type ListViewItem}" 
    BasedOn="{StaticResource ResourceKey={x:Static vsshell:VsResourceKeys.ThemedDialogListViewItemGridStyleKey}}" 
    > 
</Style> 

<Style 
    x:Key="{x:Static theming:StyleKeys.ThemedListViewGridViewColumnHeaderDefaultStyleKey}" 
    TargetType="{x:Type GridViewColumnHeader}" 
    > 
    <Setter Property="Background" Value="{DynamicResource {x:Static vsui:EnvironmentColors.ToolWindowBackgroundBrushKey}}" /> 

</Style> 

有没有默认的样式来实现正确的行为?或者有关样式中需要更改的文档?

+0

请分享像主题,vsshell,vsui等命名空间 –

回答

1

关于VS Color ServiceShared VS Colors有一些文档。共享的vs color文档应该足以让你获得正确的颜色名称以用于控制。

通常,您需要为您的控件设置Foreground,Background和Border颜色。然后,触发器根据选择,鼠标悬停,禁用等改变这些颜色。

只要您使用VS Color Service,您的UI颜色将自动更改为高对比度模式,因此您不需要处理你自己。

相关问题