วิธีเพิ่ม System.Windows.Interactivity ในโครงการ?


108

System.Windows.Interactivityโครงการของฉันหายไป Google บอกว่าฉันต้องติดตั้ง Expression Blend แต่ในคอมพิวเตอร์เครื่องอื่นฉันมีไลบรารีนี้และไม่ได้ติดตั้ง Expression Blend จึงควรมีวิธีอื่นในการขอรับSystem.Windows.Interactivity? ฉันควรทำอย่างไรดี? (ตอนนี้ฉันไม่มีคอมพิวเตอร์เครื่องอื่นเลยไม่สามารถคัดลอกไลบรารีนี้ได้ :)

คำตอบ:


92

Microsoft.Xaml.Behaviors.Wpfแพคเกจอย่างเป็นทางการสำหรับพฤติกรรมคือ

ซึ่งเคยอยู่ในBlend SDKและเลิกใช้งานแล้ว
ดูคำตอบของ Janสำหรับรายละเอียดเพิ่มเติมหากคุณจำเป็นต้องย้ายข้อมูล


2
เข้ากันไม่ได้กับ 4.6!
alerya

3
มันเศร้ามากและทำให้ฉันคลั่ง ฉันเสียใจที่ใช้รหัสที่อยู่เบื้องหลังด้วยเหตุผลดังกล่าว อัปยศกับ MS
alerya

1
@alerya: 1. คุณสามารถเขียนพฤติกรรมของ SDK นั้นได้ด้วยตัวคุณเองหากคุณต้องการจริงๆ 2. คุณเคยลองใช้แพ็คเกจ nu-get หรือยัง?
HB

1
@Shimmy: แน่นอน!
HB

6
ฉันรู้ว่าสิ่งนี้ชัดเจนสำหรับคุณบางคน แต่คุณต้องอ้างอิงคือ: xmlns:i="http://schemas.microsoft.com/xaml/behaviors"ไม่ใช่: xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"เหมือนในตัวอย่างอื่น ๆ ที่ฉันเคยเห็น
Yosef Bernal

126

แม้ว่าปัญหานี้จะค่อนข้างเก่า แต่ฉันคิดว่านี่เป็นข่าวที่เกี่ยวข้อง / คำตอบล่าสุด: พฤติกรรม XAML ที่มาจาก Microsoft แบบโอเพนซอร์สและโพสต์บล็อกโพสต์วิธีอัปเดตเป็นเวอร์ชันนี้: https://devblogs.microsoft.com/dotnet/open -sourcing-xaml- พฤติกรรมสำหรับ wpf /

เพื่อให้คุณประหยัดคลิกนี่คือขั้นตอนหลักในการย้ายข้อมูล:

  1. ลบการอ้างอิงถึง“ Microsoft.Expression.Interactions” และ“ System.Windows.Interactivity”
  2. ติดตั้งแพคเกจMicrosoft.Xaml Behaviors.Wpf NuGet
  3. ไฟล์ XAML - แทนที่ xmlns namespaces http://schemas.microsoft.com/expression/2010/interactivityและhttp://schemas.microsoft.com/expression/2010/interactionsด้วยhttp://schemas.microsoft.com/xaml / พฤติกรรม
  4. ไฟล์ C # - แทนที่การใช้งานในไฟล์ c #“ Microsoft.Xaml.Interactivity” และ“ Microsoft.Xaml.Interactions” ด้วย“ Microsoft.Xaml Behaviors”

6
นี่คือ - ตอนนี้ - คำตอบที่ถูกต้องอย่างแน่นอน ฉันดีใจมากที่ Microsoft ได้ทำสิ่งนี้สำเร็จในที่สุด ขอบคุณที่โพสต์ ฉันไม่แน่ใจว่าฉันพลาดรายการบล็อกไปได้อย่างไร ควรมีจดหมายข่าว "สุดยอดแพ็คเกจ Microsoft NuGet ใหม่"
skst

1
หาก Stackoverflow มีอารมณ์ฉันจะใช้ความ
Ibrahim Kais Ibrahim

1
ควรเป็นคำตอบที่เลือกไว้ ณ ปี 2019 ขอขอบคุณที่สละเวลาเพิ่มการอัปเดตที่สำคัญนี้
นาที

1
ทำงานให้ฉัน ฉันอัปเดตโซลูชันจาก 2015 ใน VS2019 ขอบคุณ.
KulaGGin

1
นอกจากนี้หากคุณใช้รูปร่างใด ๆ ในschemas.microsoft.com/expression/2010/drawingคุณสามารถใช้แพ็กเกจ nuget นี้ได้โดยไม่ต้องมีการเปลี่ยนแปลงโค้ด
Daniel Elkington

59

มีแพ็คเกจ NuGet ใหม่ที่มี System.Windows.Interactivity.dll ที่เข้ากันได้กับ:

  • WPF 4.0, 4.5
  • Silverligt 4.0, 5.0
  • Windows Phone 7.1, 8.0
  • Windows Store 8, 8.1

ในการติดตั้ง Expression.Blend.Sdk ให้รันคำสั่งต่อไปนี้ใน Package Manager Console

PM> Install-Package Expression.Blend.Sdk

http://www.nuget.org/packages/Expression.Blend.Sdk/


11
โปรดทราบว่าแพ็คเกจนี้ไม่ใช่การจัดจำหน่ายอย่างเป็นทางการของ Microsoft
piers7

2
หากคุณติดตั้ง MVVM Light ไว้แล้วมันจะแนะนำเวอร์ชันการปะทะกันของSystem.Windows.Interactivity. หากต้องการแก้ไขโปรดดูคำตอบของฉันด้านบน
Contango


19

ด้วยBlend for Visual Studioซึ่งรวมอยู่ใน Visual Studio ตั้งแต่เวอร์ชัน 2013 คุณจะพบ DLL ในโฟลเดอร์ต่อไปนี้:

C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.5\Libraries

คุณจะต้องเพิ่มการอ้างอิงให้กับSystem.Windows.Interactivity.dllตัวคุณเองเว้นแต่คุณจะใช้ Blend for Visual Studio กับโปรเจ็กต์ที่มีอยู่เพื่อเพิ่มฟังก์ชันที่ใช้ประโยชน์จากเนมสเปซการโต้ตอบ ในกรณีนั้น Blend จะเพิ่มการอ้างอิงโดยอัตโนมัติ


7
สิ่งนี้ช่วยแก้ไขโครงการของฉัน ด้วย Visual Studio 2017 เราต้องไปที่ Visual Studio Installer และค้นหาได้ในส่วน Individual Components (หมวด SDK)
PRouleau

18

บางครั้งเมื่อคุณเพิ่มไลบรารีใหม่ในการแนะนำเวอร์ชันการปะทะกันของSystem.Windows.Interactivity.dll.

ยกตัวอย่างเช่นแพคเกจ NuGet MVVM lightอาจต้อง v4.2 ของSystem.Windows.Interactivity.dllแต่แพคเกจ NuGet Rx-XAMLอาจต้อง v4.5 System.Windows.Interactivity.dllของ การดำเนินการนี้จะป้องกันไม่ให้โปรเจ็กต์ทำงานได้เนื่องจากไม่ว่าSystem.Windows.Interactivity.dllคุณจะรวมเวอร์ชันใดไว้ไลบรารีใดไลบรารีหนึ่งจะปฏิเสธที่จะรวบรวม

ในการแก้ไขให้เพิ่ม Assembly Binding Redirect โดยแก้ไขของคุณ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เวอร์ชันของคุณกับเวอร์ชันจริงที่คุณชี้ไปที่:

ใส่คำอธิบายภาพที่นี่


คุณโพสต์แบบเดียวกันเป๊ะ ๆ ที่นี่stackoverflow.com/questions/13514027/…หลายจุด :)
pix

14

ทางเลือกอื่นคือการแก้ไขการติดตั้ง Visual Studio ปัจจุบันของคุณใน Visual Studio Installer

Win+ R %ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vs_installer.exe

การเพิ่มBlend for Visual Studio SDK for .NET'ส่วนบุคคล' ภายใต้ 'SDKs, ไลบรารีและกรอบงาน':

ใส่คำอธิบายภาพที่นี่ หลังจากที่เพิ่มส่วนนี้ควรจะปรากฏในที่ตั้งปกติSystem.Windows.InteractivityAdd Reference/Assemblies/Extensions


ดูเหมือนว่าสิ่งนี้จะใช้ได้กับ VS2017 หรือก่อนหน้านี้เท่านั้น สำหรับเวอร์ชันที่ใหม่กว่าโปรดดูคำตอบอื่น ๆ


2
ไม่ปรากฏให้ฉันเห็น :(
Julien

ไม่ปรากฏสำหรับฉันเช่นกัน ใช้ VS 2019
Barış Akkurt

2

มันอยู่ใน MVVM แสงได้รับมันจากMVVM ไฟหน้าดาวน์โหลด


1
ทางออกที่ดีที่สุด เพิ่มเติม: use nugetInstall-Package MvvmLightLibs -Version 5.3.0
dhcgn


0

หากคุณกำลังทำงานกับ MVVM Light คุณต้องใช้System.Windows.Interactivity Version 4.0(NuGet .dll ไม่ทำงาน) ที่คุณสามารถพบได้ภายใต้:

PathToProjectFolder\Software\packages\MvvmLightLibs.5.4.1.1\lib\net45\System.Windows.Interactivity.dll

เพียงเพิ่ม. dll นี้ด้วยตนเองเป็นข้อมูลอ้างอิงก็น่าจะดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.