2015-03-31 72 views
-1

我的風格設置前景色:更改顏色在XAML中不起作用?

<Style x:Key="ValueStyle" TargetType="{x:Type TextBlock}" BasedOn="{StaticResource SubHeadingFontStyle}"> 
    <Setter Property="HorizontalAlignment" Value="Center"/> 
    <Setter Property="VerticalAlignment" Value="Center"/>  
    **<Setter Property="v:DynamicProperties.ForegroundKey" Value="{Binding Color, Mode=OneWay, Converter={v:SignalColorToResourceKeyConverter}}" />** 
</Style> 

我有DataTemplete:

<DataTemplate DataType="{x:Type vs:NumericVisualizerElement}"> 
    <TextBlock x:Name="AverageValue" 
       **Style="{StaticResource ValueStyle}"** 
       Text="{Binding Path=AverageValue, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> 
    <DataTemplate.Triggers> 
     **<DataTrigger Binding="{Binding Path=Color}" Value="None"> 
      <Setter Property="TextBlock.Foreground" Value="Red" /> 
     </DataTrigger>** 
    </DataTemplate.Triggers> 
</DataTemplate> 

以V:SignalColorToResourceKeyConverter如果顏色爲 「無」,然後返回DependencyProperty.UnsetValue。但是當Color是None時,我想Foreground是紅色的。 當第一次加載顏色爲無時,則前景爲紅色,但是當我在運行時更改顏色時,則返回顏色爲無,前景不是紅色,即爲UnsetValue。如何解決它? 感謝您的幫助!

編輯1: 我定義枚舉SignalColor

public enum SignalColor 
{ 
    None, 
    Signal01A, 
    Signal02A, 
    Signal03A, 
} 

和方法在SignalColorToResourceKeyConverter.cs轉換

public object Convert(object value, Type tagertType, object parameter, System.Globalization.CultureInfo culture) 
    { 

     var signalColor = (SignalColor) value; 

     switch (signalColor) 
     { 
      case SignalColor.None: 
       return DependencyProperty.UnsetValue; 
      case SignalColor.Signal01A: 
       return "Signal01ABrush"; 
      case SignalColor.Signal01B: 
       return "Signal01BBrush"; 
     } 
    } 

我希望當我選擇的顏色是無,前景將覆蓋紅。我想在文件xaml中執行此操作。

回答

0

試試這個 XAML代碼:

Foreground="{Binding RowForeColor, 
Converter={StaticResource StringToColorConverter}}" 

轉換代碼

public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     if ((string)value == "Red") 
     { 
      return "Red"; 
     } 
     else if((string)value == "White") 
     { 
      return "White"; 
     } 
     else if ((string)value == "LightGray") 
     { 
      return "LightGray"; 
     } 
     else if((string)value =="Pink") 
     { 
      return "Pink"; 
     } 
     return "Black"; 
    } 
+0

我想這樣做在文件XAML。 – 2015-03-31 07:07:43