我刚刚将此行添加到我的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但从未打开或使用它。
答案 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
与最终指向的实际版本相匹配:
答案 3 :(得分:0)
还可以选择使用Blend for Visual Studio本身在需要时添加所有必需的引用。您只需在Blend中打开解决方案,然后导航到要添加Blend行为的视图文件。打开视图后,您必须从“解决方案资源管理器”切换到“资源”选项卡,选择“行为”并双击“想要的操作”,例如, CallMethodAction。
Blend将自动添加对System.Windows.Interactivity
和Microsoft.Expression.Interactions
,XML名称空间的引用,并生成XAML代码。您必须在Blend中保存更改的文件,切换到Visual Studio并重新加载解决方案以应用更改。