【问题标题】:WINRT XAML System.Void Compile Error inWINRT XAML System.Void 编译错误
【发布时间】:2013-03-04 17:26:19
【问题描述】:

在商店应用程序中进行了一些代码更改后,我遇到了编译错误:

-> System.Void 不能在 C# 中使用 -- 使用 typeof(void) 来获取 void 类型对象。

问题是:这来自一个生成的文件:XamlTypeInfo.g.cs。

case "System.Void"
    userType= new ... ,typeof(global::System.Void), ...
    ...

回滚更改没有帮助,如删除 bin 和 obj、重新启动等。

实际的 System.Void 案例条目是否可能表明代码生成器无法识别 XAML 文件中的某些内容?有效的 XamlTypeInfo.g.cs 中是否有 System.Void 条目?

--- 添加 --- 我现在可以在更改特定行时产生编译错误。我有一个从 ItemsControl 派生的自定义控件。我定义了一个正常工作的常规 DP。我还为 Template、TemplateSelector 和 Style 提供 AttachedProperties。想想一个通过 AttachedProperty 获取标签的文本框,它不仅是一个字符串,而且像 HeaderedControls 一样,您可以为标签定义一个模板等。

问题与 AttachedProp 的 Get/Set 方法有关。当我将 Getter 返回类型更改为 DataTemplate 或完全注释掉 Setter 时,就会出现编译错误:

public static DataTemplate GetLabelTEmplate(UIElement element)
{
    return (DataTemplate)element.GetValue(LabelTemplateProperty;
}

public static void SetLabelTemplate(UIElement element, object value)
{
    element.SetValue(LabelTemplateProperty, value);
}

任何想法都将受到高度赞赏。

最好的问候 去吧

【问题讨论】:

  • 您能否发布与此附加属性关联的 XAML?
  • 目前还没有使用这些属性的 XAML。只是控件,它不会编译。有趣的是,一位同事使用来自另一个分支的相同项目来手动添加这些 AP 并进行编译。 XamlTypeInfo 已正确生成。我会尝试创建一个新项目并将其转移过来,看看它是否有效。
  • 我刚刚在 connect.microsoft 提交了带有附件的错误报告:connect.microsoft.com/VisualStudio/feedback/details/779775/… 让我们看看他们对此有何看法。

标签: windows-store-apps winrt-xaml


【解决方案1】:

在向微软提交错误投诉后,他们向我指出了问题:setter 的值不能是 object 类型。 XamlTypeInfo 生成需要此信息,因此当我将 object 更改为 DataTemplate 时,它已编译。

虽然我还没有尝试过,但我相信对象对于普通 WPF 来说是可以的,但对于 Win 8 Store 应用程序,这确实会导致编译错误。有趣的东西... :)

【讨论】:

  • 我曾希望您的解决方案能有所帮助,但不幸的是,即使我的 setter 的值不是对象类型而是 MediaCapture 类型,因为我试图将它绑定到 CaptureElement,我仍然收到相同的错误。
  • 显示您的 CLR 属性
  • public static MediaCapture GetMediaCaptureSource(DependencyObject captureElement) { return captureElement.GetValue(MediaCaptureSourceProperty) as MediaCapture; } public static void SetMediaCaptureSource(CaptureElement captureElement, MediaCapture mediaCapture) { captureElement.SetValue(MediaCaptureSourceProperty, mediaCapture); }
  • 嗯...与我可以看到的通常示例的唯一区别是在 Setter 中的第一个参数是 CaptureElement 类型。我的定义通常是 UIElement,或者在您的情况下它可能是 DependencyObject。您可能这样做是为了只允许在 Capture 元素处设置属性,但我不确定这是否是问题所在。虽然现在无法检查。也许只是将其更改为 DependencyObject 以进行快速测试。
  • 看来至少在 WPF 中这是不可能的...stackoverflow.com/questions/6874427/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
相关资源
最近更新 更多