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

XamlParseException:“”不是属性“RuntimeVisibility”的有效值?

  •  -1
  • StayOnTarget  · 技术社区  · 2 年前

    在编辑WPF自定义控件时,Visual Studio 2019中的设计视图遇到以下错误:

    enter image description here

    (下面是整个异常的详细信息)。

    网络搜索没有发现任何有用的东西 RuntimeVisibility ,尽管还有其他措辞类似的“不是有效值”信息,但它们似乎千差万别。我甚至找不到与WPF相关的术语“RuntimeVisibility”。

    因此,我试图通过在一个单独的VS2019实例中附加到XDesProc来调试VS2019设计器进程。通过启用捕获所有异常,当有问题的控件加载到设计器中时,它确实会中断。但它在任何用户级代码中都没有失败;这个问题出现在框架内部的某个深处,而在那个堆栈框架中的调试信息对我来说毫无意义。

    我正在寻找一种方法或建议来找出这个问题的根本原因。虽然这在设计器中很烦人,但我更担心的是这是否会导致运行时出错。如前所述 运行时可见性 财产似乎并不是设计师特有的问题。


    完整的异常信息:

    XamlParseException: '' is not a valid value for property 'RuntimeVisibility'.
    
    StackTrace
    
       at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader, XamlObjectWriter currentWriter)
       at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlObjectWriter objectWriter)
       at System.Windows.FrameworkTemplate.LoadOptimizedTemplateContent(DependencyObject container, IComponentConnector componentConnector, IStyleConnector styleConnector, List`1 affectedChildren, UncommonField`1 templatedNonFeChildrenField)
       at System.Windows.FrameworkTemplate.LoadContent(DependencyObject container, List`1 affectedChildren)
       at System.Windows.StyleHelper.ApplyTemplateContent(UncommonField`1 dataField, DependencyObject container, FrameworkElementFactory templateRoot, Int32 lastChildIndex, HybridDictionary childIndexFromChildID, FrameworkTemplate frameworkTemplate)
       at System.Windows.FrameworkTemplate.ApplyTemplateContent(UncommonField`1 templateDataField, FrameworkElement container)
       at System.Windows.FrameworkElement.ApplyTemplate()
    
    InnerException: '' is not a valid value for property 'RuntimeVisibility'.
    
    
       ArgumentException: '' is not a valid value for property 'RuntimeVisibility'.
    
       StackTrace
    
          at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
          at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
    
       InnerException: None
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   StayOnTarget    2 年前

    在我放弃调试XDesProc之后,我只是凭直觉在XAML中注释内容,看看是否能找到问题所在。我不知道它起源于XAML,但事实确实如此。

    通过“outside in”(意思是,注释掉XAML的几乎整个正文,然后逐渐添加回其中),我能够将其缩小到一行,删除后也消除了错误:

            <Canvas
                ToolTipService.IsEnabled="{c:Binding ShowToolTip}"
                Visibility="{c:Binding IsVisible}"
                >
    

    哪里 c:Binding 指:

    xmlns:c="clr-namespace:CalcBinding;assembly=CalcBinding"
    

    ( https://github.com/Alex141/CalcBinding )

    Visibility 属性,错误就会消失。

    什么 c: 绑定 正在执行的操作是在 bool 视图模型中的属性和适当的 可见度 价值这通常工作得很好,但我可以用普通绑定和转换器来代替它来解决这个问题。