【发布时间】:2011-09-30 11:56:26
【问题描述】:
我想根据布尔的状态更改 WPF 控件的颜色,在本例中是复选框的状态。 只要我使用 StaticResources,它就可以正常工作:
我的控制
<TextBox Name="WarnStatusBox" TextWrapping="Wrap" Style="{DynamicResource StatusTextBox}" Width="72" Height="50" Background="{Binding ElementName=WarnStatusSource, Path=IsChecked, Converter={StaticResource BoolToWarningConverter}, ConverterParameter={RelativeSource self}}">Status</TextBox>
我的转换器:
[ValueConversion(typeof(bool), typeof(Brush))]
public class BoolToWarningConverter : IValueConverter
{
public FrameworkElement FrameElem = new FrameworkElement();
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
bool state = (bool)value;
try
{
if (state == true)
return (FrameElem.TryFindResource("WarningColor") as Brush);
else
return (Brushes.Transparent);
}
catch (ResourceReferenceKeyNotFoundException)
{
return new SolidColorBrush(Colors.LightGray);
}
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return null;
}
}
问题是我有几个依赖于设置白天模式或夜间模式的资源“WarningColor”定义。这些事件不会触发 WarningColor 更改。 有没有办法让返回值动态化,还是我需要重新考虑我的设计?
【问题讨论】:
-
您能将 IMultiValueConverter 与 MultiBinding 一起使用吗?在我看来,您有 2 个值应该触发更改,而不仅仅是 IsChecked。
-
是的。那是我最终做的。我必须添加一个处理程序来捕获显示更新事件并更新一个可观察的计数器。
标签: wpf ivalueconverter dynamicresource