2013-01-16 54 views
1

我遇到了使用組合框設置自定義屬性的問題。我正在使用.Net 4.0,WPF和xaml資源來設置字典中的類型以及app.xaml中的一些畫筆。我可以使用周圍的「邊框」技巧獲得漂亮的圓角並找到漸變和佈局。不過,我似乎無法讓組合框中的「選定項目」具有除暗灰色之外的背景。我寧願將其更改爲透明,並繼承父邊框的漸變。但是我錯過了這樣做的財產或關係。以Combobox的風格覆蓋所選項目以顯示comboxbox的背景不是灰色背景

有沒有人知道如何在xaml中做到這一點?

圖片:

Combobox Current showings of Selections and selected

代碼:

字典項:

<Style TargetType="{x:Type Border}"> 
     <Setter Property="Background" Value="{StaticResource MoneyBrush}" /> 
     <Setter Property="BorderBrush" Value="#071C07" /> 
    <Setter Property="BorderThickness" Value="3" /> 
    <Setter Property="CornerRadius" Value="20" /> 
    <Setter Property="SnapsToDevicePixels" Value="True" /> 
    </Style> 

刷在主App.xaml中:

<LinearGradientBrush x:Key="MoneyBrush" EndPoint="0.5,1" StartPoint="0.5,0"> 
      <GradientStop Color="#3A883A" Offset="1" /> 
      <GradientStop Color="#FFFFFF" Offset="0" /> 
      <GradientStop Color="#FF53AA75" Offset="0.50" /> 
      <GradientStop Color="#073307" Offset="0.95" /> 
     </LinearGradientBrush> 
<LinearGradientBrush x:Key="FontBrush" EndPoint="0.5,1" StartPoint="0.5,0"> 
      <GradientStop Color="Black" Offset="0" /> 
      <GradientStop Color="#107810" Offset="0.50" /> 
      <GradientStop Color="Black" Offset="0.65" /> 
     </LinearGradientBrush> 

AC在主窗口圖阿爾項目:

<Border Margin="5" > 
        <ComboBox Height="30" Width="170" Margin="10" x:Name="combopersons" 
        FontSize="20" 
        ItemsSource="{Binding Path=People}" 
        DisplayMemberPath="FirstName" 
        SelectedValuePath="PersonId" 
        SelectedValue="{Binding Path=CurrentUser}" 
        Foreground="{StaticResource FontBrush}"> 
        </ComboBox> 
       </Border> 

編輯>>>

我喜歡@iltzortz提出的解決方案,但我想一個梯度,所以在這種情況下,這將更好地工作:

<ComboBox.Resources> 
    <LinearGradientBrush x:Key="{x:Static SystemColors.WindowBrushKey}" > 
     <GradientStop Color="#3A883A" Offset="1" /> 
     <GradientStop Color="#FFFFFF" Offset="0" /> 
     <GradientStop Color="#FF53AA75" Offset="0.50" /> 
     <GradientStop Color="#073307" Offset="0.95" /> 
    </LinearGradientBrush> 
    <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" > 
     <GradientStop Color="#000000" Offset="1" /> 
     <GradientStop Color="#FFFFFF" Offset="0" /> 
    </LinearGradientBrush> 
</ComboBox.Resources> 

編輯2 >>>

出於某種原因,這隻會在我使用.NET 4.0或高建立的應用程序她在Visual Studio 2012中使用Windows 7.當我嘗試在家中運行代碼時出於某種原因 它不會渲染我相信這是由於Windows 8或Visual Studio 2010爲不同的系統值解釋不同的顏色。如果你有Windows 8或Visual Studio 2010,請注意這一點,因爲它適用於我的環境,但不適用於其他......好奇。

回答

1

下面的代碼似乎做的工作

<Grid Background="Pink"> 

    <ComboBox Margin="10,0" Width="100" Height="40"> 
     <ComboBoxItem>1</ComboBoxItem> 
     <ComboBoxItem>2</ComboBoxItem>    
     <ComboBoxItem>3</ComboBoxItem> 
     <ComboBox.Resources> 
      <SolidColorBrush x:Key="{x:Static SystemColors.WindowBrushKey}" Color="Green" /> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" /> 
     </ComboBox.Resources>    
    </ComboBox> 

    <TextBox VerticalAlignment="Top" Margin="10"/> 
</Grid> 
+0

也儘量SystemColors.ControlBrushKey – iltzortz

+0

這不僅使得畫面的第一部分有四個箱子統一顏色的選擇。它仍然沒有設置'set'項目作爲指定的顏色。我需要弄清楚這個屬性。我想覆蓋很多SystemColors,但沒有找到它。 – djangojazz

+0

我編輯了我的答案,你可以檢查這是否得到你想要的結果?如果我理解的很好,這似乎得到你想要的結果 – iltzortz