我正在为我的项目设计GUI。 我需要做的是根据绑定源中的布尔值更改标签的颜色。但问题是我需要为标签分配一个颜色,而绑定源没有这个(我不想在绑定源中使用Color属性)。
当bool为true时,如何处理将标签设为红色,否则为黑色?
提前致谢。
答案 0 :(得分:3)
由于您无法直接绑定它们,因此必须在任一侧创建一个额外的属性。您可以在(业务)对象(您说您不想要)中添加Color属性,这样就可以在窗体/控件上添加一个属性,该属性绑定到(业务)对象上的属性。
更新
如果要将属性添加到可绑定的表单,请添加以下内容。
public bool MyPropertyToBindTo {
get { return _myLabel.Color == Color.Red; }
set { _myLabel.Color = value ? Color.Red : Color.Black; }
}
现在您可以将business-object-property绑定到此属性,它应该可以正常工作。
答案 1 :(得分:2)
您可以使用转换器。 (我已从多个来源复制/更新了此代码,请原谅一些语法错误。)
public class BoolToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Color labelColor;
// Implement your conversion code here ...
return labelColor;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// As far as I understood your question you
// will not need to convert back.
return DependencyProperty.UnsetValue;
}
}
然后,您需要在UserControl
或Window
部分的Resources
的XAML中定义它(转换器是命名空间)。 (在此示例中,converter
映射到定义BoolToColorConverter
的命名空间。)
<UserControl.Resources>
<converter:BoolToColorConverter x:Key="boolToColor" />
</UserControl.Resources>
之后,您最终可以在XAML中使用它进行此绑定:
<Label Content="{Binding Path=YourBoundProperty, Converter={StaticResource boolToColor}}" />
答案 2 :(得分:1)
如果您使用Wpf,则可以使用Converter
关于颜色和价值的链接:http://www.c-sharpcorner.com/uploadfile/dpatra/value-converter-in-wpf-part-i/
答案 3 :(得分:0)
只是不要将boolean属性绑定到控件,覆盖DataBinding
事件,并在该事件处理程序中根据布尔变量设置Color
的{{1}}。 Label
事件存在(至少部分),您可以放置对于传统数据绑定而言过于复杂的数据绑定逻辑。