根据布尔值更改边框颜色

时间:2014-11-03 11:41:11

标签: wpf xaml converter

我有一个边框,我想根据布尔变量改变颜色。我使用link here来实现BooleanColor转换器。

代码如下所示:

xaml:

<Border Width="45" 
     Height="45" CornerRadius="5" 
     Background="{Binding Path=LivenessActive, Converter={StaticResource BrushColorConverter}}" />

后台的LivenessActive变量:

public bool LivenessActive
{
  get { return _livenessActive; }
  set
  {
      _livenessActive = value;
      OnPropertyChanged("LivenessActive");
  }
}

该类具有INotifyPropertyChanged的继承并已实施OnPropertyChanged事件。

BrushColorConverter.cs:

public class BrushColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if ((bool)value)
        {
            {
                return new SolidColorBrush(Colors.GreenYellow);
            }
        }
        return new SolidColorBrush(Colors.DarkGray);
    }

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

}

但我甚至无法触发BrushColorConverter。我做错了什么?

第二:如果我想从另一个窗口使用它呢?

<Border Width="45" Height="45" CornerRadius="5" 
     Background="{Binding Path=LivenessActive, Converter={StaticResource BrushColorConverter}, 
                RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type view:MyWindowName}}}" />

我使用了相同的代码并且没有找到它。

1 个答案:

答案 0 :(得分:3)

总结评论,因为上面的代码似乎没有任何问题,这表明绑定上下文存在问题

Background="{Binding Path=LivenessActive, Converter={StaticResource BrushColorConverter}}"

您无法从另一个Window引用一个Window。如果您有2个独立的Window,每个Border都应该触发相同的属性更改,那么您将两个窗口的DataContext设置为相同的视图模型实例。