在我的WPF应用程序中,我有一个样式,当绑定对象不为null时,用图像画笔填充矩形。样式的工作方式与我期望的方式相同,但是当Binding为null时,我会收到有关ImageBrush setter值的警告。我希望我可以使用转换器或空触发器避免这种情况但是,我仍然得到警告。有没有一种方法可以绑定到一个对象并检查它是否在xaml中为null而没有在输出窗口中收到警告?
<Style TargetType="Rectangle" x:Key="LightHeadRectangle">
<Setter Property="Fill" Value="Red" />
<Style.Triggers>
<DataTrigger Binding="{Binding BarLight, Converter={StaticResource isNullConverter}}" Value="false">
<Setter Property="Fill">
<Setter.Value>
<ImageBrush Stretch="Fill" ImageSource="{Binding BarLight.OpenMount.ImagePath}" />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
更新:希望停止发生通用空警告,但在这种情况下我得到的具体警告是。
System.Windows.Data错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement。 BindingExpression:路径= BarLight.OpenMount.ImagePath;的DataItem = NULL; target元素是'ImageBrush'(HashCode = 47952502); target属性是'ImageSource'(类型'ImageSource')
更新
请注意,我使用此样式来定位多个listboxitem数据模板可能会有所帮助。 BarLight最初也是空的。
答案 0 :(得分:3)
AFAIK你无法在代码中关闭它们,但是如果你使用的是Visual Studio,你可以在那里关闭它们。
话虽如此,在XAML中绑定到静默失败是完全可以接受的。失败的绑定不会引发异常,因此它不会对最终用户产生影响(只要您(开发人员)在某些用户的体验未受到损害的情况下意味着绑定失败) 。
警告就像开发人员的调试机制一样,以防他们不希望绑定失败。我不建议关闭它。
答案 1 :(得分:1)
将您的ImageBrush放在一个单独的资源中将解决问题。
<ImageBrush x:Key="brush" Stretch="Fill" ImageSource="{Binding BarLight.OpenMount.ImagePath}" />
<Style TargetType="Rectangle" x:Key="LightHeadRectangle">
<Setter Property="Fill" Value="Red" />
<Style.Triggers>
<DataTrigger Binding="{Binding BarLight, Converter={StaticResource isNullConverter}}" Value="False">
<Setter Property="Fill" Value="{StaticResource brush}">
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>