Como adicionar System.Windows.Interactivity ao projeto?

107

Meu projeto está faltando System.Windows.Interactivity. O Google diz que eu tenho que instalar o Expression Blend, mas no meu outro computador eu tenho essa biblioteca e não tenho o Expression Blend instalado. Portanto, deve haver outra maneira de obter System.Windows.Interactivity? O que devo fazer? (no momento não tenho outro computador, então não posso simplesmente copiar esta biblioteca :)

javapowered
fonte

Respostas:

92

O pacote oficial para comportamentos é Microsoft.Xaml.Behaviors.Wpf.

Ele costumava estar no Blend SDK e está obsoleto.
Veja a resposta de Jan para mais detalhes se você precisar migrar.

HB
fonte
2
Não compatível com 4.6!
alerya
3
É muito triste e me deixa furioso. Infelizmente, estou usando code behind por esse motivo. Que vergonha para o MS.
alerya
1
@alerya: 1. Você mesmo pode escrever completamente o comportamento desse SDK se realmente quiser. 2. Você já tentou o pacote nu-get?
HB
1
@Shimmy: Claro!
HB
6
Eu sei que isso é óbvio para alguns de vocês, mas a referência é: xmlns:i="http://schemas.microsoft.com/xaml/behaviors"não: xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"como em todos os outros exemplos que vi.
Yosef Bernal
124

Embora esse problema seja antigo, acho que esta é uma notícia relevante / a resposta mais recente: Comportamentos XAML de código-fonte aberto da Microsoft e postou um blog sobre como atualizar para esta versão: https://devblogs.microsoft.com/dotnet/open -sourcing-xaml-behaviours-for-wpf /

Para economizar um clique, estas são as principais etapas para migrar:

  1. Remova a referência a “Microsoft.Expression.Interactions” e “System.Windows.Interactivity”
  2. Instale o pacote Microsoft.Xaml.Behaviors.Wpf NuGet.
  3. Arquivos XAML - substitua os namespaces xmlns http://schemas.microsoft.com/expression/2010/interactivity e http://schemas.microsoft.com/expression/2010/interactions por http://schemas.microsoft.com/xaml / behaviors
  4. Arquivos C # - substitua os usos nos arquivos c # “Microsoft.Xaml.Interactivity” e “Microsoft.Xaml.Interactions” por “Microsoft.Xaml.Behaviors”
Jan
fonte
6
Esta é - agora - absolutamente a resposta correta. Estou tão feliz que a Microsoft finalmente fez isso. Obrigado por postar. Não tenho certeza de como perdi a entrada do blog. Deve haver um boletim informativo para "Novos pacotes NuGet da Microsoft".
skst
1
Se Stackoverflow tem emoções, eu usaria um cervo para sua resposta
Ibrahim Kais Ibrahim
1
Deve ser a resposta selecionada em 2019. Obrigado por reservar um tempo para adicionar esta atualização importante.
minutos
1
Funcionou para mim. Atualizei a solução de 2015 no VS2019. Obrigado.
KulaGGin
1
Além disso, se estiver usando qualquer uma das formas em schemas.microsoft.com/expression/2010/drawing , você pode usar este pacote nuget - nenhuma alteração de código é necessária.
Daniel Elkington
59

Há um novo pacote NuGet que contém o System.Windows.Interactivity.dll compatível com:

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

Para instalar o Expression.Blend.Sdk, execute o seguinte comando no console do gerenciador de pacotes

PM> Install-Package Expression.Blend.Sdk

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

Thomas
fonte
10
Observe que este pacote não é uma distribuição oficial da Microsoft
piers7
2
Se você já tiver o MVVM Light instalado, ele apresentará uma versão conflitante do System.Windows.Interactivity. Para resolver, veja minha resposta acima.
Contango
19

Com o Blend for Visual Studio , que está incluído no Visual Studio a partir da versão 2013, você pode encontrar a DLL na seguinte pasta:

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

Você terá que adicionar a referência a System.Windows.Interactivity.dllvocê mesmo, a menos que use o Blend for Visual Studio com um projeto existente para adicionar funcionalidade que faz uso do namespace de interatividade. Nesse caso, o Blend adicionará a referência automaticamente.

cutucar
fonte
7
Isso ajudou a consertar meu projeto. Com o Visual Studio 2017, temos que ir no Visual Studio Installer e localizá-lo em Componentes Individuais (categoria SDK).
PRouleau
18

Às vezes, quando você adiciona uma nova biblioteca, em introduz uma versão conflitante de System.Windows.Interactivity.dll.

Por exemplo, o pacote NuGet MVVM lightpode exigir a v4.2 de System.Windows.Interactivity.dll, mas o pacote NuGet Rx-XAMLpode exigir a v4.5 de System.Windows.Interactivity.dll. Isso impedirá que o projeto funcione, porque independentemente da versão que System.Windows.Interactivity.dllvocê incluir, uma das bibliotecas se recusará a compilar.

Para corrigir, adicione um Redirecionamento de vinculação de montagem editando seu app.configpara se parecer com isto:

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

Não se preocupe em alterar o PublicKeyToken, isso é constante em todas as versões, pois depende do nome do .dll, não da versão.

Certifique-se de combinar o newVersionem seu appConfigcom a versão real para a qual você acabou apontando:

insira a descrição da imagem aqui

Contango
fonte
Você fez exatamente a mesma postagem aqui, stackoverflow.com/questions/13514027/… Multiple points :)
pix
14

A solução alternativa é modificar sua instalação atual do Visual Studio no Visual Studio Installer

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

adicionando o Blend for Visual Studio SDK for .NET'Componente individual' em 'SDKs, bibliotecas e estruturas':

insira a descrição da imagem aqui após adicionar este componente System.Windows.Interactivitydeve aparecer em seu local regular Add Reference/Assemblies/Extensions.


Parece que isso só funcionaria para VS2017 ou anterior. Para versões posteriores, por favor, consulte outras respostas.

Wonderra
fonte
2
não aparece para mim :(
Julien
não aparece para mim também. usando VS 2019
Barış Akkurt 01 de
2

Está no MVVM Light, baixe-o na página de download do MVVM Light .

Contango
fonte
1
Melhor solução. Adição: use nugetInstall-Package MvvmLightLibs -Version 5.3.0
dhcgn
1

Eu consegui por meio do Pacote NuGet Prism.WPF. (inclui Windows.System.Interactivity)

Halloween_Udo
fonte
0

Se você estiver trabalhando com o MVVM Light, deverá usar o System.Windows.Interactivity Version 4.0(NuGet .dll não funcionará) que pode ser encontrado em:

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

Basta adicionar este .dll manualmente como referência e ele deve ficar bem.

nairda-newb
fonte