2013-07-24 50 views
1

如何使用XAML中的Style綁定顏色Bkg(System.Drawing.Color),在設置中定義?使用XAML中的Style設置綁定Drawing.Color

的xmlns:道具= 「CLR-名稱空間:App.Properties」

<Style TargetType="{x:Type StackPanel}" x:Key="_itemStyle"> 
    <Setter Property="Background" Value="{Binding Path=Bkg, Source={x:Static props:Settings.Default}}"/> 

背景屬性是類型System.Windows.Media.Color的,因此它需要以某種方式轉換的α

+0

爲什麼就不能創建類型'System.Windows.Media.Color'的設置?只需點擊設置類型組合框中的瀏覽...,然後選擇PresentationCore - > System.Windows.Media - > Color。 – Clemens

+0

嗯,不錯。但如何定義透明顏色? –

+0

@PatrikPolakovic如果有任何答案解決你的問題,你可以標記它。 – loop

回答

4

Panel.Background屬性是System.Windows.Media.Brush類型而不是System.Windows.Media.Color因此您需要將其轉換爲SolidColorBrush。下面你可以找到這兩個案例場景:

設置爲System.Windows.Media.Color

<Setter Property="Background"> 
    <Setter.Value> 
     <SolidColorBrush Color="{Binding Source={x:Static props:Settings.Default}, Path=Bkg}"/> 
    </Setter.Value> 
</Setter> 

設置爲System.Drawing.Color類型的:爲此,你需要自定義IValueConverter將其轉換成SolidColorBrush

public class ColorToBrushConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var dc = (System.Drawing.Color)value; 
     return new SolidColorBrush(new Color { A = dc.A, R = dc.R, G = dc.G, B = dc.B }); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

您在資源中定義的內容:

<Window.Resources> 
    <local:ColorToBrushConverter x:Key="ColorToBrushConverter"/> 
</Window.Resources> 

,你可以使用它像這樣:

<Setter Property="Background" Value="{Binding Source={x:Static props:Settings.Default}, Path=Bkg, Converter={StaticResource ColorToBrushConverter}}"/> 
+0

謝謝,我使用了System.Windows.Media.Color變體。 –

0

正如你所知道的背景屬性是solidbrush類型,所以它的值可以設置或只與一些solidbrush典型屬性。所以你可以做的是做一個solidbrush類型的屬性代替這種顏色的地方在你的設置類。 現在每一件事只是做工精細..

static SolidColorBrush brush = new SolidColorBrush(Colors.Red); 

    public static SolidColorBrush colorBrush 
    { 
     get 
     { 
      return brush; 
     } 
    } 

如果你不想這樣做,那麼你必須使用值轉換器..for,您可以按照

this link ..hope它可以幫助你。

0

只需創建System.Windows.Media.SolidColorBrush類型的設置。

類型組合框新設置的選擇Browse...,然後選擇PresentationCore - >System.Windows.Media - >SolidColorBrush

你現在可以直接使用該設置,你已經做了:

<Setter Property="Background" 
     Value="{Binding Path=Bkg, Source={x:Static props:Settings.Default}}"/>