在WPF中绑定为空时,如何避免xaml警告?

时间:2015-03-26 19:21:57

标签: c# wpf xaml

在我的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最初也是空的。

2 个答案:

答案 0 :(得分:3)

AFAIK你无法在代码中关闭它们,但是如果你使用的是Visual Studio,你可以在那里关闭它们。

  1. 转到工具 - &gt;选项
  2. 在调试下(在左窗格中),转到输出窗口
  3. 在“WPF跟踪设置”下(在右侧窗格中),找到“数据绑定”并将其值设置为“关闭”
  4. 话虽如此,在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>