Как добавить в проект System.Windows.Interactivity?

108

Мой проект отсутствует System.Windows.Interactivity. Google говорит, что мне нужно установить Expression Blend, но на другом моем компьютере у меня есть эта библиотека, а Expression Blend не установлен. Значит, должен быть другой способ получить System.Windows.Interactivity? Что я должен делать? (сейчас у меня нет другого компьютера, поэтому я не могу просто скопировать эту библиотеку :)

Явный
источник

Ответы:

93

Официальный пакет поведений - это Microsoft.Xaml.Behaviors.Wpf.

Раньше он был в Blend SDK и устарел.
См . Ответ Яна для получения дополнительной информации, если вам нужно перейти.

HB
источник
2
Не совместим с 4.6!
alerya 04
3
Это очень грустно и сводит меня с ума. По этой причине я, к сожалению, использую программный код. Позор MS.
alerya 04
1
@alerya: 1. Вы можете полностью написать поведение этого SDK самостоятельно, если хотите. 2. Вы пробовали пакет nu-get?
HB
1
@ Шимми: Конечно же!
HB
6
Я знаю, что это очевидно для некоторых из вас, но вам нужно сослаться на это: xmlns:i="http://schemas.microsoft.com/xaml/behaviors"не: xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"как в любом другом примере, который я видел.
Йосеф Бернал,
129

Хотя эта проблема довольно старая, я думаю, что это актуальная новость / самый последний ответ: Microsoft с открытым исходным кодом XAML Behaviors и опубликовал сообщение в блоге, как обновиться до этой версии: https://devblogs.microsoft.com/dotnet/open -sourcing-xaml-поведения-для-wpf /

Чтобы сэкономить вам клик, вот основные шаги по миграции:

  1. Удалите ссылки на «Microsoft.Expression.Interactions» и «System.Windows.Interactivity».
  2. Установите пакет NuGet Microsoft.Xaml.Behaviors.Wpf .
  3. Файлы XAML - замените пространства имен xmlns 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 есть эмоции, я бы сказал, что ты хочешь ответить,
Ибрагим Кайс Ибрагим
1
Должен быть выбранным ответом по состоянию на 2019 год. Спасибо, что нашли время добавить это важное обновление.
минут
1
Работал у меня. Я обновил решение с 2015 года на VS2019. Спасибо.
KulaGGin
1
Кроме того, если вы используете какие-либо фигуры в schemas.microsoft.com/expression/2010/drawing , вы можете использовать этот пакет nuget - никаких изменений кода не требуется.
Дэниел Элкингтон
59

Существует новый пакет NuGet, содержащий System.Windows.Interactivity.dll, совместимый с:

  • WPF 4.0, 4.5
  • Silverligt 4.0, 5.0
  • Windows Phone 7.1, 8.0
  • Магазин Windows 8, 8.1

Чтобы установить Expression.Blend.Sdk, выполните следующую команду в консоли диспетчера пакетов

PM> Install-Package Expression.Blend.Sdk

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

Томас
источник
11
Обратите внимание, что этот пакет не является официальным дистрибутивом Microsoft
piers7,
2
Если у вас уже установлен MVVM Light, он представит конфликтующую версию System.Windows.Interactivity. Чтобы решить эту проблему, см. Мой ответ выше.
Contango,
20

В Blend для Visual Studio , который включен в Visual Studio, начиная с версии 2013, вы можете найти DLL в следующей папке:

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

Однако вам придется добавить ссылку на System.Windows.Interactivity.dllсебя, если вы не используете Blend для Visual Studio с существующим проектом, чтобы добавить функциональность, которая использует пространство имен Interactivity. В этом случае Blend автоматически добавит ссылку.

тыкать
источник
7
Это помогло исправить мой проект. В Visual Studio 2017 мы должны зайти в установщик Visual Studio и найти его в отдельных компонентах (категория SDK).
PRouleau
18

Иногда, когда вы добавляете новую библиотеку, появляется конфликтующая версия System.Windows.Interactivity.dll.

Например, для пакета NuGet MVVM lightможет потребоваться v4.2 of System.Windows.Interactivity.dll, но для пакета NuGet Rx-XAMLможет потребоваться v4.5 of System.Windows.Interactivity.dll. Это предотвратит работу проекта, потому что какую бы версию 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фактическую версию , что вы в конечном итоге направлены на:

введите описание изображения здесь

Контанго
источник
Вы сделали точно такой же пост здесь, stackoverflow.com/questions/13514027/… Несколько точек :)
pix
14

Альтернативным решением является изменение текущей установки Visual Studio в установщике Visual Studio

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

добавление Blend for Visual Studio SDK for .NET«Отдельный компонент» в «SDK, библиотеки и фреймворки»:

введите описание изображения здесь после добавления этот компонент System.Windows.Interactivityдолжен появиться на своем обычном месте Add Reference/Assemblies/Extensions.


Похоже, это будет работать только для VS2017 или ранее. Для более поздних версий обратитесь к другим ответам.

Wondra
источник
2
не появляется для меня :(
Жюльен
у меня тоже не появляется. с использованием VS 2019
Barış Akkurt
1

Получил через NuGet-пакет Prism.WPF. (включает Windows.System.Interactivity)

Halloween_Udo
источник
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 вручную как ссылку, и все будет в порядке.

nairda-newb
источник