繁体   English   中英

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

[英]How can I avoid xaml warnings when a binding is null in WPF?

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

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

  1. 转到工具 - >选项
  2. 在“调试”下(在左窗格中),转到“输出窗口”
  3. 在“WPF跟踪设置”(右窗格)下,找到“数据绑定”并将其值设置为“关闭”

话虽如此,在XAML中绑定到静默失败是完全可以接受的。 失败的绑定不会引发异常,因此它没有最终用户的影响(只要您,开发人员,在某些用户体验未受到损害的情况下,绑定失败)。

警告就像开发人员的调试机制一样,以防他们不希望绑定失败。 我不建议关掉它。

将您的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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM