代码之家  ›  专栏  ›  技术社区  ›  SledgeHammer

为什么wpf转换器显示蓝色波形?

  •  0
  • SledgeHammer  · 技术社区  · 6 年前

    internal class FlatTreeMarginConverter : IValueConverter
    {
        #region Fields
    
        private static readonly Thickness _emptyThickness = new Thickness(0, 0, 0, 0);
    
        #endregion
    
        #region IValueConverter Members
    
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            FlatTreeViewItem tvi = value as FlatTreeViewItem;
    
            if (tvi == null)
                return _emptyThickness;
    
            int nLevel = -1;
    
            while (tvi != null)
            {
                tvi = tvi.GetVisualAncestor<FlatTreeViewItem>();
                nLevel++;
            }
    
            return new Thickness(19 * nLevel, 0, 0, 0);
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    
        #endregion
    }
    

    出于某种原因,Xaml中的声明下面有一个蓝色的波形,例外是“Object reference not set to instance.”。声明看起来就像:

    2 回复  |  直到 6 年前
        1
  •  1
  •   PilouPili    6 年前

    我看不出“Object reference not set to instance.”在您显示的代码中可能来自何处。所以它一定是从别的地方来的。。。

    调试和理解“Object reference not set to instance.”的来源有一个neet技巧。


    看一看 Attach debugger onto another Visual Studio instance

    完成后,打开Xaml文件。
    异常“Object reference not set to instance.”将被另一个visualstudio实例抛出并捕获,从而允许您查看它的来源。 允许您调试代码。

        2
  •  0
  •   Andy    6 年前

    在内部类中有公共方法。公开班级,清理班级,重建班级。公共方法/属性在内部类中降级为内部。

    不管是什么进程,xaml都不是完全可靠的,像这样的伪蓝色波形是很常见的。

    除非你明确地清理,否则VS保留旧的定义也是很常见的。

    一旦你改为公共清洁和重建。。。它转起来好吗?

    顺便提一下

    例如:

    public class IsOfTypeConverter : MarkupExtension, IValueConverter
    {
        public Type TypeToCompare { get; set; }
    
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value.GetType() == TypeToCompare;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return null;
        }
    
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
    

    可用于:

       <DataTrigger Binding="{Binding ., Converter={ui:IsOfTypeConverter TypeToCompare={x:Type ui:PlaceVM}}}" Value="True">