Pergunta

Estou tendo um problema estranho abrindo meu UserControl na mistura de expressão ao usar um controle do Silverlight Toolkit. Meu UserControl usa o ListBoxDragDropTarget do kit de ferramentas da seguinte forma:

<controlsToolkit:ListBoxDragDropTarget mswindows:DragDrop.AllowDrop="True" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
        <ListBox ItemsSource="{Binding MyItemControls}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <controlsToolkit:WrapPanel/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>
</controlsToolkit:ListBoxDragDropTarget>

Tudo funciona conforme o esperado em tempo de execução e fica bem no Visual Studio 2008. No entanto, quando tento abrir meu UserControl na mistura, eu recebo XamlParseException: [Linha: 0 Posição: 0 E não consigo ver nada na exibição de design. Mais especificamente mistura reclama:

O elemento "ListBoxDragDropTarget" não pôde ser exibido devido a um problema com system.windows.controls.listboxdragdroptarget: incompatibilidade TargetType.

Meu aplicativo Silverlight está referenciando o System.Windows.Controls.Toolkit do lançamento do Toolkit de novembro de 2009, e certifiquei -me de incluir essas declarações de namespace para o listboxdragdroptarget:

xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"
xmlns:mswindows="clr-namespace:Microsoft.Windows;assembly=System.Windows.Controls.Toolkit"

Se eu comentar o wrapper ListBoxDragDropTarget Control e deixar o ListBox, posso ver tudo bem na exibição de design sem erros. Além disso, percebi que isso está acontecendo com uma variedade de controles do Silverlight Toolkit, porque se eu comentar listboxdragdroptarget e substituí -lo por

<controlsToolkit:BusyIndicator />

O mesmo erro exato ocorre na mistura. O que é ainda mais estranho é que, se eu iniciar um novo aplicativo Silverlight na mistura, posso adicionar esses elementos do kit de ferramentas sem qualquer tipo de erro, por isso parece que algo idiota que está acontecendo com as referências do meu projeto aos assemblies do kit de ferramentas.

Tenho certeza de que isso tem algo a ver com o carregamento dos estilos padrão para os controles do kit de ferramentas do seu genérico.xaml, pois o erro tem a ver com o TargetType e o Blend provavelmente está tentando carregar os estilos padrão.

Alguém já encontrou esse problema antes ou tem alguma idéia de qual pode ser o meu problema?

Foi útil?

Solução

Olá, tínhamos exatamente o mesmo problema, resolvemos isso verificando as referências no projeto que estavam tendo esse problema. Todos os conjuntos de ferramentas referenciados devem estar no mesmo diretório no disco.

Nossa referência do projeto ao System.Windows.Controls.toolkit.dll sempre 'saltou de volta ao caminho orginal que estava causando nosso problema. Resolvamos editando o arquivo do projeto no Notepad ++ (ou em qualquer um dos seus editores de texto favoritos) e codifica o caminho em que ele poderia encontrar a montagem.

Espero que isto ajude.

Outras dicas

Para o Visual Studio (talvez também misture), você precisa adicionar uma referência a:

System.Windows.Controls.Toolkit.Internals.dll

"C: Arquivos de Programas Microsoft SDKS Silverlight V4.0 Toolkit Apr10 Bin System.windows.controls.toolkit.internals.dll"

Estou usando o Silverlight 5 Toolkit e tendo XamlParseException Ao usar BusyIndicator Controle do kit de ferramentas na mistura de expressão para o SL 5, todas as soluções acima não ajudaram, mas eu encontrei outra solução alternativa, está bastante suja, mas me permite fazer BusyIndecator trabalho na mistura de expressão,

  1. deriva do controle

    public class BusyIndicatorEx : BusyIndicator
    {
        public BusyIndicatorEx()
        {
            this.DefaultStyleKey = typeof(BusyIndicatorEx);
        } 
    }
    
  2. criar estilo para controle derivado (basta copiar o estilo de BusyIndicator código -fonte para temas/genérico.xaml e altere o tipo de destino para local:BusyIndicatorEx)

Eu tive o mesmo problema que foi resolvido com a introdução de uma referência fictícia no código atrás do painel WRAP.

Sei que é um pouco C ++ Y, mas posso imaginar que é porque temos referência indireta ao painel de envoltório dentro de um modelo e não na página de nível superior, para que o carregador não saiba o que carregar na inicialização. Eu realmente gosto de entender o motivo exato, no entanto.

Acabei de mencionar System.Windows.Controls.Toolkit e apresentar o seguinte membro no código atrás de:

System.Windows.Controls.WrapPanel _dummy;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top