Làm thế nào để thêm System.Windows.Interactivity vào dự án?


107

Dự án của tôi bị thiếu System.Windows.Interactivity. Google nói rằng tôi phải cài đặt Expression Blend, nhưng trên máy tính khác của tôi, tôi có thư viện này và tôi chưa cài đặt Expression Blend. Vì vậy, nên có một cách khác để có được System.Windows.Interactivity? Tôi nên làm gì? (hiện tại tôi không có máy tính khác nên tôi không thể sao chép thư viện này :)

Câu trả lời:


92

Gói chính thức cho các hành vi là Microsoft.Xaml.Behaviors.Wpf.

Nó từng có trong Blend SDK và không được dùng nữa.
Xem câu trả lời của Jan để biết thêm chi tiết nếu bạn cần di chuyển.


2
Không tương thích với 4.6!
alerya

3
Nó rất buồn và khiến tôi phát điên. Tôi rất buồn khi sử dụng mã phía sau vì lý do đó. Xấu hổ cho MS.
alerya

1
@alerya: 1. Bạn hoàn toàn có thể tự viết hành vi của SDK đó nếu bạn thực sự muốn. 2. Bạn đã thử gói nu-get chưa?
HB

1
@Shimmy: Chắc chắn rồi!
HB

6
Tôi biết điều này là hiển nhiên đối với một số bạn nhưng bạn cần tham khảo là: xmlns:i="http://schemas.microsoft.com/xaml/behaviors"not: xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"như trong mọi ví dụ khác mà tôi đã thấy.
Yosef Bernal

124

Mặc dù vấn đề này đã khá cũ, nhưng tôi nghĩ đây là tin tức có liên quan / câu trả lời gần đây nhất: Microsoft XAML Behaviors nguồn mở và đã đăng một bài blog về cách cập nhật lên phiên bản này: https://devblogs.microsoft.com/dotnet/open -sourcing-xaml-behavior-for-wpf /

Để tiết kiệm cho bạn một cú nhấp chuột, đây là các bước chính để di chuyển:

  1. Xóa tham chiếu đến “Microsoft.Expression.Interaction” và “System.Windows.Interactivity”
  2. Cài đặt gói Microsoft.Xaml.Behaviors.Wpf NuGet.
  3. Tệp XAML - thay thế không gian tên xmlns http://schemas.microsoft.com/expression/2010/interactivityhttp://schemas.microsoft.com/expression/2010/interactive bằng http://schemas.microsoft.com/xaml /hành vi cư xử
  4. Tệp C # - thay thế việc sử dụng trong các tệp c # “Microsoft.Xaml.Interactivity” và “Microsoft.Xaml.Interaction” bằng “Microsoft.Xaml.Behaviors”

6
Đây - bây giờ - hoàn toàn là câu trả lời chính xác. Tôi rất vui vì Microsoft cuối cùng đã làm được điều này. Cảm ơn vì đã đăng nó. Tôi không chắc mình đã bỏ lỡ mục nhập blog như thế nào. Sẽ có một bản tin về "Các gói Microsoft NuGet mới, thú vị."
skst

1
Nếu Stackoverflow có cảm xúc, tôi sẽ sử dụng một hart cho câu trả lời của bạn
Ibrahim Kais Ibrahim

1
Sẽ là câu trả lời được chọn vào năm 2019. Cảm ơn bạn đã dành thời gian để thêm bản cập nhật quan trọng này.
phút

1
Đã làm cho tôi. Tôi đã cập nhật giải pháp từ năm 2015 trên VS2019. Cảm ơn bạn.
KulaGGin

1
Ngoài ra, nếu bạn đang sử dụng bất kỳ hình dạng nào trong schemas.microsoft.com/expression/2010/drawing , bạn có thể sử dụng gói nuget này - không cần thay đổi mã.
Daniel Elkington

59

Có một gói NuGet mới có chứa System.Windows.Interactivity.dll tương thích với:

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

Để cài đặt Expression.Blend.Sdk, hãy chạy lệnh sau trong Bảng điều khiển Trình quản lý Gói

PM> Install-Package Expression.Blend.Sdk

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


10
Lưu ý rằng gói này không phải là bản phân phối chính thức của Microsoft
piers

2
Nếu bạn đã cài đặt MVVM Light, nó sẽ giới thiệu một phiên bản xung đột của System.Windows.Interactivity. Để giải quyết, hãy xem câu trả lời của tôi ở trên.
Contango


19

Với Blend for Visual Studio , được bao gồm trong Visual Studio bắt đầu từ phiên bản 2013, bạn có thể tìm thấy DLL trong thư mục sau:

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

Tuy nhiên, bạn sẽ phải thêm tham chiếu vào System.Windows.Interactivity.dllchính mình, trừ khi bạn sử dụng Blend cho Visual Studio với một dự án hiện có để thêm chức năng sử dụng không gian tên Tương tác. Trong trường hợp đó, Blend sẽ tự động thêm tham chiếu.


7
Điều này đã giúp điều này sửa chữa dự án của tôi. Với Visual Studio 2017, chúng ta phải truy cập Visual Studio Installer và tìm nó trong danh mục Các thành phần riêng lẻ (danh mục SDK).
PRouleau

18

Đôi khi, khi bạn thêm một thư viện mới, trong giới thiệu một phiên bản xung đột của System.Windows.Interactivity.dll.

Ví dụ: gói NuGet MVVM lightcó thể yêu cầu v4.2 trong System.Windows.Interactivity.dll, nhưng gói NuGet Rx-XAMLcó thể yêu cầu v4.5 của System.Windows.Interactivity.dll. Điều này sẽ ngăn dự án hoạt động, bởi vì bất kể System.Windows.Interactivity.dllbạn đưa vào phiên bản nào, một trong các thư viện sẽ từ chối biên dịch.

Để khắc phục, hãy thêm Chuyển hướng ràng buộc lắp ráp bằng cách chỉnh sửa của bạn app.configđể trông giống như sau:

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

Đừng lo lắng về việc thay đổi PublicKeyToken, không đổi trên tất cả các phiên bản, vì nó phụ thuộc vào tên của .dll, không phải phiên bản.

Đảm bảo rằng bạn khớp nội dung newVersioncủa mình appConfigvới phiên bản thực tế mà bạn cuối cùng chỉ vào:

nhập mô tả hình ảnh ở đây


Bạn đã thực hiện cùng một bài đăng ở đây, stackoverflow.com/questions/13514027/… Nhiều điểm :)
pix

14

Giải pháp thay thế là sửa đổi cài đặt Visual Studio hiện tại của bạn trong Trình cài đặt Visual Studio

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

thêm Blend for Visual Studio SDK for .NET'Thành phần riêng lẻ' trong 'SDK, thư viện và khuôn khổ':

nhập mô tả hình ảnh ở đây sau khi thêm thành phần này System.Windows.Interactivitysẽ xuất hiện ở vị trí bình thường của nó Add Reference/Assemblies/Extensions.


Có vẻ như điều này sẽ chỉ hoạt động cho VS2017 hoặc sớm hơn. Đối với các phiên bản sau, vui lòng tham khảo các câu trả lời khác.


2
không xuất hiện cho tôi :(
Julien

cũng không xuất hiện cho tôi. using VS 2019
Barış Akkurt,


1

Tôi đã lấy nó thông qua Prism.WPF NuGet-Package. (nó bao gồm Windows.System.Interactivity)


0

Nếu bạn đang làm việc với MVVM Light, bạn phải sử dụng System.Windows.Interactivity Version 4.0(NuGet .dll sẽ không hoạt động) mà bạn có thể tìm thấy trong:

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

Chỉ cần thêm .dll này theo cách thủ công làm Tham chiếu và nó sẽ ổn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.