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

时间:2015-07-21 17:38:54

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

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

<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>

如果事件绑定到我的VM,则VM中的命令定义为RelayCommand。如上所述,这是一个没有错误的工作解决方案。我在编译时更新了并且仍然没有错误。 我在视图后面没有代码,但错误发生在下面标有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
    }
}
}

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

我尝试卸载并安装多个软件包但没有成功。 我试图搜索,并找到包含Mode=Oneway的想法,以及xaml解析器中的一些说明错误。我完全失去了。

希望有人可以帮忙!

错误 enter image description here

我使用i:interaction时会显示此错误。我找了一种方法来找到System.Windows.Interactivity的wp8.1版本但是还没有能够这样做。因此,我确保MVVMLight工具已更新:

enter image description here

基于评论的信息

app.config的差异                          是一个新的补充。

WMAppManifest.xml的差异 NotificationService =&#34; WNS&#34;因为我已经设置它并且它可以工作

NEW

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

OLD

<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>

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

<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

1 个答案:

答案 0 :(得分:1)

我仍然愿意接听答案。

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

升级解决方案,卸载并使用packmanager控制台重新安装后,我删除了所有错误。但解决方案无效。最后,我必须创建一个新的解决方案并导入旧项目。然而,一些问题仍然存在,导致复制到新文件,使用相同的名称创建。突然它起作用了,很奇怪:/

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

这真的很奇怪,因此仍然需要解决方案,因为这需要一段时间!