c# - 交互触发 wp8.1(silverlight) 时的 xaml 解析错误

标签 c# xaml silverlight windows-phone-8.1 mvvm-light

我有一个适用于 WP8.0 的工作解决方案。但我需要升级才能访问 WNS。我已成功将 WNS 添加到主菜单工作中的升级解决方案。但是在升级到 wp8.1(silverlight) 之后,我遇到了一些奇怪的错误,这些错误只发生在运行时。例如,它发生在以下用户控件中:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
xmlns:View="clr-namespace:ShieldGenerator.View"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
x:Class="ShieldGenerator.View.MoveableShieldGear"
mc:Ignorable="d"
Canvas.Left="{Binding Gear.x}" Canvas.Top="{Binding Gear.y}" Canvas.ZIndex="{Binding Gear.z}" >

<Path Data="{Binding Gear.Path}" Fill="{Binding Gear.Color}" Stretch="Fill" UseLayoutRounding="False" Height="{Binding Gear.Height}" Width="{Binding Gear.Width}" Opacity="{Binding Gear.Opacity}">
    <Path.RenderTransform>
        <TransformGroup>
            <ScaleTransform ScaleX="{Binding Gear.Scale}" ScaleY="{Binding Gear.Scale}" CenterX="{Binding Gear.CenterX}" CenterY="{Binding Gear.CenterY}"/>
            <RotateTransform Angle="{Binding Gear.Rotate}" CenterX="{Binding Gear.CenterX}" CenterY="{Binding Gear.CenterY}" />
            <SkewTransform AngleX="{Binding Gear.SkewX}" AngleY="{Binding Gear.SkewY}" CenterX="{Binding Gear.CenterX}" CenterY="{Binding Gear.CenterY}" />
        </TransformGroup>
    </Path.RenderTransform>

    <i:Interaction.Triggers>

        <i:EventTrigger EventName="ManipulationStarted">
            <cmd:EventToCommand Command="{Binding MouseDownGearCommand}" PassEventArgsToCommand="True"/>
        </i:EventTrigger>

        <i:EventTrigger  EventName="ManipulationDelta">
            <cmd:EventToCommand Command="{Binding MouseGearMoveCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
        </i:EventTrigger>

        <i:EventTrigger  EventName="ManipulationCompleted">
            <cmd:EventToCommand Command="{Binding MouseUpGearCommand}" PassEventArgsToCommand="True"/>
        </i:EventTrigger>

        <i:EventTrigger  EventName="DoubleTap">
            <cmd:EventToCommand Command="{Binding DoubleTapCommand}" PassEventArgsToCommand="True"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>

</Path>

</UserControl>

在事件绑定(bind)到我的 VM 的地方,VM 中的命令定义为 RelayCommand .如前所述,这是一个没有错误的有效解决方案。我更新了,编译时仍然没有错误。 我没有 View 背后的代码,但错误发生在下面标有 ERROR 的行中(在 *.g.cs 文件中)

namespace ShieldGenerator.View {


public partial class MoveableShieldGear : System.Windows.Controls.UserControl {

    private bool _contentLoaded;

    /// <summary>
    /// InitializeComponent
    /// </summary>
    [System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public void InitializeComponent() {
        if (_contentLoaded) {
            return;
        }
        _contentLoaded = true;
        System.Windows.Application.LoadComponent(this, new System.Uri("/ShieldGenerator;component/View/MoveableShieldGear.xaml", System.UriKind.Relative)); //ERROR
    }
}
}

错误指的是<i:Interaction.Triggers>中的行在上面的 xaml 代码中。

我已经尝试卸载和安装多个软件包,但均未成功。 我试着四处搜索,找到了包含 Mode=Oneway 的想法,以及 xaml 解析器中的一些陈述错误。我完全不知所措。

希望有人能帮忙!

错误 enter image description here

这个错误在我使用 i:interaction 的任何地方都显示.我一直在寻找一种方法来找到 System.Windows.Interactivity 的 wp8.1 版本但一直未能如愿。因此,我确保更新了 MVVMLight 工具:

enter image description here

基于评论的信息

新的差异app.config 是新添加的。

新的差异WMAppManifest.xml NotificationService="WNS"因为我已经设置好并且可以使用了

<Capabilities>
  <Capability Name="ID_CAP_NETWORKING" />
  <Capability Name="ID_CAP_MEDIALIB_AUDIO" />
  <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" /> 
  <Capability Name="ID_CAP_MEDIALIB_PHOTO" />
</Capabilities>

<Capabilities>
  <Capability Name="ID_CAP_NETWORKING" />
  <Capability Name="ID_CAP_MEDIALIB_AUDIO" />
  <Capability Name="ID_CAP_MEDIALIB_PLAYBACK" />
  <Capability Name="ID_CAP_SENSORS" />
  <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
  <Capability Name="ID_CAP_MEDIALIB_PHOTO" />
  <Capability Name="ID_CAP_PUSH_NOTIFICATION" />
  <Capability Name="ID_CAP_IDENTITY_USER" />
 </Capabilities>

我删除了不再使用的功能。并在新的 Package.appxmanifest 中添加适用于 WP8.1

<Capabilities>
<Capability Name="internetClientServer" />
<Capability Name="musicLibrary" />
<Capability Name="picturesLibrary" />

根据另一个问题,AGHost.exe 也有问题,但我没有尝试删除它,因为我认为以下是强制性的。

<Applications>
<Application Id="xd82c080dy903dy47f4yba02y5a36d745c72bx" Executable="AGHost.exe" EntryPoint="StartUp/FirstPage.xaml">
  <m3:VisualElements DisplayName="XXXXX" Square150x150Logo="Assets\SquareTile150x150.png" Square44x44Logo="Assets\Logo.png" Description="XXXX" ForegroundText="light" BackgroundColor="#464646" ToastCapable="true">
    <m3:DefaultTile Square71x71Logo="Assets\SquareTile71x71.png">
    </m3:DefaultTile>
    <m3:SplashScreen Image="Assets\Splashscreen.png" />
  </m3:VisualElements>
</Application>


</Applications>
<Capabilities>
    <Capability Name="internetClientServer" />
    <Capability Name="musicLibrary" />
    <Capability Name="picturesLibrary" />
</Capabilities>
<Extensions>
  <Extension Category="windows.activatableClass.inProcessServer">
    <InProcessServer>
      <Path>AgHostSvcs.dll</Path>
      <ActivatableClass ActivatableClassId="AgHost.BackgroundTask" ThreadingModel="both" />
    </InProcessServer>
  </Extension>
</Extensions>

在此文件中找不到任何其他问题。 AssemblyInfo.csAppManifest.xml是相同的。查看引用文件夹,引用似乎没问题,并针对 wp8.1 进行了更新(那些可以)

额外

如果我将 xaml 代码(即交互路径)复制到另一个有效的页面。然后,在对没有代码段的情况下工作的页面进行 xaml 解析期间,它会因相同的错误而失败。

新更新 似乎在我升级后,解决方案和项目中的某些东西被损坏了。我发现的以下内容是我可以启动代码并在新项目中工作。 如果我运行并部署该项目,代码就可以工作。

如果我在另一方面使用同一个项目,在部署时工作,现在从另一个项目导航到它 "/BC_Creator;component/MainPage.xaml"然后又出现上面的错误。我现在唯一的想法是尝试创建全新的项目并将代码复制粘贴到新文件中。由于导入它们似乎仍然不起作用。

WTF 已经发生了 :S

最佳答案

我仍然对答案持开放态度。

但我目前的结果是,问题实际上出在 MVVMLight 包上。

在升级解决方案、卸载并使用 packmanager 控制台重新安装之后,我已经删除了所有错误。但是解决方案不起作用。这已经结束,我不得不创建一个新的解决方案并导入旧项目。然而,一些问题仍然存在,导致复制粘贴到新文件中,并创建了相同的名称。突然它起作用了,太奇怪了:/

旧的解决方案仍然不起作用,甚至测试导入旧文件(不是项目 JUST 代码文件)也不起作用,只能重新创建和复制。

这真的很奇怪,所以仍然对解决方案持开放态度,因为这会花费很长时间!

关于c# - 交互触发 wp8.1(silverlight) 时的 xaml 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31545965/

相关文章:

c# - Silverlight 工具包——拦截拖动启动

c# - Entity Framework 包含没有关系

c# - c#.net 中的全局变量

c# - IEnumerable<T> 跳过无限序列

c# - 图像控件绑定(bind)生成的Imageurl

silverlight - 在后面的代码中更改 Silverlight 5 中按钮的背景颜色

wpf - 是否对各种 XAML 方言之间的差异有一个很好的概述

c# - webservice从webMethod参数中删除NameSpace的问题

c# - UWP - ListView.ItemTemplate 中的 StateTrigger

wpf - Background "Red"中的字符串="Red"如何转换为SolidColorBrush?