是 Intellisense 错了还是我错了?

Is Intellisense wrong or am I?

我发现了我认为应该报告的 Intellisense 错误,但我想确定一下。

我正在为网格的 IsHitTestVisible 属性 编写带有转换器的多重绑定。当我的网格的不透明度逐渐降低到零时,我将 IsHitTestVisible 设置为 false。 (淡入淡出发生在动画的其他地方)。

这是相关的XAML

<Grid x:Name="DetailGrid" >

    <Grid.IsHitTestVisible>
        <MultiBinding Converter="{net:CompareConverter}" ConverterParameter="{x:Static net:CompareOp.Greater}">
            <Binding RelativeSource="{RelativeSource Self}" 
                     Path="Opacity" />    <!-- INTELLISENSE DOESNT LIKE THIS -->
            <Binding Source="{net:DoubleVal 0.0}" />
        </MultiBinding>
    </Grid.IsHitTestVisible>
</Grid>

Intellisense 告诉我“Opacity”不是 MultiBinding 的 属性。这是真的。但是RelativeSource Self应该是指Grid,而不是MultiBinding吧?

我不是在寻找解决方法。我试图了解 Intellisense 是否有误。因为它似乎是;绑定似乎有效。我只是想确定一下。 (此外,我已经有一个解决方法:如果我从 RelativeSource Self 切换到 ElementName="DetailGrid" 则没有 Intellisense 错误)

那么我是否正确,Intellisense 弄错了?

[编辑]. 因为我的示例使用了转换器和其他人没有的东西。这里有一个更简单的例子来说明这个问题。

鉴于这个简单的虚拟多转换器 returns 它给出的第一个值(或 0)

using System;
using System.Globalization;
using System.Linq;
using System.Windows.Data;

namespace TestBindingWarning
{
public class ReturnFirstConverter : IMultiValueConverter
{
    public object Convert(object[] vals, Type t, object p, CultureInfo c) => 
        vals.Length > 0 ? vals[0] : 0;

    public object[] ConvertBack(object v, Type[] tt, object p, CultureInfo c) =>
        Enumerable.Repeat(Binding.DoNothing, tt.Length).ToArray();
}
}

想象一个试图通过多重绑定将其宽度绑定到其高度的网格。荒谬,是的,但合法且应用程序运行

<Grid Height="100" Background="Blue">
    <Grid.Resources>
        <local:ReturnFirstConverter x:Key="Cvt"/>
    </Grid.Resources>
    <Grid.Width>
        <MultiBinding Converter="{StaticResource Cvt}" >
            <Binding RelativeSource="{RelativeSource Self}" Path="Height"/>
        </MultiBinding>
    </Grid.Width>
</Grid>

在这种情况下,Intellisense 会抱怨“属性 'Height' 未在“MultiBinding”中找到。这就是问题

If I switch from RelativeSource Self to ElementName="DetailGrid" there is no Intellisense error) So am I correct that Intellisense has got this wrong?

Since 我没有你的完整样本来测试它。我建议您可以尝试这些步骤来解决您的问题,以检查它是 VS 的问题还是您的项目本身的问题:

1)Extensions 菜单下禁用任何第三方扩展,以检查扩展是否导致此行为。

2)删除解决方案文件夹下的.vs隐藏文件夹,binobj文件夹然后重启你的项目再次测试.

3)请尝试创建一个新的空wpf项目(禁用任何第三方扩展),如果你在新项目中没有遇到同样的问题,它是相关的到您的特定项目本身。并按照以上两个步骤。或者只是将您的旧项目迁移到新项目中可能是一个不错的选择。

如果你在新项目上遇到同样的问题,那应该是VS的问题。

在此之前,您应该do a repair in VS Installer或将 VS 更新到最新版本,以防某些修复已发布。

============================================= =========

如果您尝试了所有步骤但仍然出现相同的错误,请随时告诉我们,我们将帮助您报告此问题,以便为您提供更好的支持。

更新 1

非常奇怪的智能感知行为,我已经 report this issue on our DC forum。如果我没有详细描述问题,您可以查看 link 并投票或添加任何评论。

包括我们在内的任何对它感兴趣的人都会给它投票,这样它会得到更多 Microsoft 的关注。