2016-12-29 37 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顏色將自動更改爲高對比度模式,因此您不需要處理你自己。

相關問題