为什么System.Windows.Interactivity不想工作?

时间:2014-07-20 07:02:21

标签: c# wpf xaml

我刚刚将此行添加到我的XAML文件中:

xmlns:interactivity="clr-namespace:System.Windows.Interactivity"

首先,我得到一个未定义的CLR命名空间错误,但在构建之后它被修复了。现在,当我尝试在mt XAML文件中添加交互标记时,我在此命名空间中收到完整错误。

以下是我的代码示例

<Window x:Class="ColorTest.MainWindow"
    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:interactivity="clr-namespace:System.Windows.Interactivity"
    xmlns:ignore="http://www.ignore.com"
    mc:Ignorable="d ignore"
    Height="576"
    Width="720"
    Title="MVVM Light Application"
    DataContext="{Binding Main, Source={StaticResource Locator}}">

<Grid x:Name="LayoutRoot" Background="#FF44494D">
    <Rectangle x:Name="Color01" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="10,29,0,0" Stroke="Black" VerticalAlignment="Top" Width="100">
        <!--<interactivity:Interaction.Triggers>
            <interactivity:EventTrigger EventName="MouseDown">
            <interactivity:InvokeCommandAction Command="{Binding MyCommand}"/>
        </interactivity:EventTrigger>
        </interactivity:Interaction.Triggers>-->
    </Rectangle>
  </Grid>

这里的帮助是我的项目文件的一部分,带有我的参考资料

    <Reference Include="GalaSoft.MvvmLight.Extras.WPF45">
      <HintPath>packages\MvvmLightLibs.4.2.30.0\lib\net45\GalaSoft.MvvmLight.Extras.WPF45.dll</HintPath>
    </Reference>
    <Reference Include="GalaSoft.MvvmLight.WPF45">
      <HintPath>packages\MvvmLightLibs.4.2.30.0\lib\net45\GalaSoft.MvvmLight.WPF45.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Practices.ServiceLocation">
      <HintPath>packages\CommonServiceLocator.1.0\lib\NET35\Microsoft.Practices.ServiceLocation.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>packages\MvvmLightLibs.4.2.30.0\lib\net45\System.Windows.Interactivity.dll</HintPath>
    </Reference>
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="System.Xaml">
      <RequiredTargetFramework>4.0</RequiredTargetFramework>
    </Reference>
    <Reference Include="WindowsBase" />
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />

要完成,我想告诉您我已安装Blend但从未打开或使用它。

4 个答案:

答案 0 :(得分:8)

这是XAML中交互性的正确命名空间:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

答案 1 :(得分:2)

您需要为驻留在不同程序集中的名称空间提供程序集名称。声明名称空间如下:

xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

答案 2 :(得分:0)

首先,添加MVVM Light NuGet包,它将添加对System.Windows.Interactivity.dll的引用

但是,有时候,当你添加一个新的NuGet包时,in可能会引入一个冲突版本的System.Windows.Interactivity.dll

这可以防止项目工作。

要修复此问题,请通过修改app.config来添加程序集绑定重定向,如下所示:

<?xml version="1.0"?>
<configuration>
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Windows.Interactivity"
                        publicKeyToken="31bf3856ad364e35"
                        culture="neutral"/>
      <bindingRedirect oldVersion="4.0.0.0"
                       newVersion="4.5.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
<appSettings>
  <add key="TestKey" value="true"/>
</appSettings>

不要担心在所有版本中更改PublicKeyToken,这是常量,因为它取决于.dll的名称,而不是版本。

确保您将newVersion中的appConfig与最终指向的实际版本相匹配:

enter image description here

答案 3 :(得分:0)

还可以选择使用Blend for Visual Studio本身在需要时添加所有必需的引用。您只需在Blend中打开解决方案,然后导航到要添加Blend行为的视图文件。打开视图后,您必须从“解决方案资源管理器”切换到“资源”选项卡,选择“行为”并双击“想要的操作”,例如, CallMethodAction。 Blend将自动添加对System.Windows.InteractivityMicrosoft.Expression.Interactions,XML名称空间的引用,并生成XAML代码。您必须在Blend中保存更改的文件,切换到Visual Studio并重新加载解决方案以应用更改。