2017-06-16 27 views
0

我正在開發一個需要檢查某些可用性屬性的小應用程序。我正在使用WPF的用戶界面。如果從組合框中進行選擇,我需要更改一些前景色。我有這樣的DataTemplate:布爾轉換器在WPF中的多個綁定

<DataTemplate x:Key="userTemplate"> 
<TextBlock VerticalAlignment="Center"> 
    <Image Source="imgsource.png" Height="25" Width="25" /> 
    <Run Text="{Binding BooleanObjectName}" Foreground="{Binding boolobject, Converter={StaticResource convAvailability}}"/> 
</TextBlock> 

所以我用這個皈依一個的IValueConverter那臺色到前景:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    BooleanObject boolobject = (BooleanObject)value; 
    if (boolobject.IsBoolValueOne) return System.Drawing.Brushes.Green; 
    else if (boolobject.IsBoolValueTwo) return System.Drawing.Brushes.Red; 
    else if (boolobject.IsBoolValueThree) return (SolidColorBrush)(new BrushConverter().ConvertFrom("#d3d300")); 
    else return System.Drawing.Brushes.Black; 
} 

什麼是錯,因爲在我界面我總是得到黑色。對此有何想法?

任何幫助將非常感激。 在此先感謝。

+1

你需要一個[刷子](https://msdn.microsoft.com/en-us /library/system.windows.media.brushes(v=vs.110).aspx)從WPF項目中的System.Windows.Media命名空間中獲取,System.Drawing命名空間用於WinForms。 – Funk

+0

你的Convert方法被調用了嗎? – mm8

+0

@ mm8我試過調試,我認爲它沒有被調用 – R3muSGFX

回答

1

正如@Funk指出的那樣,您會返回錯誤類型的畫筆。你應該返回System.Windows.Media.Brush對象:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    BooleanObject boolobject = (BooleanObject)value; 
    if (boolobject.IsBoolValueOne) 
     return System.Windows.Media.Brushes.Green; 
    else if (boolobject.IsBoolValueTwo) 
     return System.Windows.Media.Brushes.Red; 
    else if (boolobject.IsBoolValueThree) 
     return (SolidColorBrush)(new BrushConverter().ConvertFrom("#d3d300")); 

    return System.Windows.Media.Brushes.Black; 
} 

那麼它應該工作前提是你綁定到boolobject財產的實際工作。否則你的轉換器根本不會被調用。

如果你希望綁定到對象本身,應指定的道路「」:

<TextBlock VerticalAlignment="Center"> 
    <Image Source="imgsource.png" Height="25" Width="25" /> 
    <Run Text="{Binding BooleanObjectName}" Foreground="{Binding Path=., Converter={StaticResource convAvailability}}"/> 
</TextBlock> 
+0

沒關係。解決了這個問題,因爲我的代碼沒有正確設置ComboBoxitem.IsSelected值。 – R3muSGFX

+0

「combobox item green selected」。除了你以外,沒有其他人能夠知道這意味着什麼。你在Convert方法中放置了一個斷點嗎? IsBoolValueOne,IsBoolValueTwo和IsBoolValueThree屬性返回什麼?可能是錯誤的。 – mm8

+0

非常感謝你的幫助! – R3muSGFX