2010-03-23 8 views
4

J'essaie d'utiliser WpfToolkit DataGrid dans le projet Windows Phone 7 (Silverligt 4) et cela ne fonctionne pas. Voici le code XAML:WpfToolkit DataGrid ne fonctionne pas dans Windows Phone 7

<UserControl x:Class="SilverlightControls.Grid" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    xmlns:wtk="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
    d:DesignHeight="480" d:DesignWidth="480"> 

    <Grid x:Name="LayoutRoot" Background="#FF1F1F1F" Width="960"> 
     <Grid x:Name="TitleGrid"> 
      <TextBlock Text="{Binding Title}" Style="{StaticResource PhoneTextPageTitle2Style}"/> 
     </Grid> 
     <wtk:DataGrid> 
     </wtk:DataGrid> 
    </Grid> 
</UserControl> 

Le projet compile bien mais se bloque à l'exécution en essayant de charger ce contrôle. Le meilleur indice que j'ai obtenu jusqu'ici provient de Visual Studio Designer. Une fois que j'ajoute wtk:DataGrid au contrôle le concepteur visuel ne charge pas et ci-dessous est l'exception qu'il affiche.

Se pourrait-il que WpfToolkit repose sur PresentationFramework.dll et qu'il ne soit pas disponible dans SL4?

 
System.Reflection.Adds.UnresolvedAssemblyException 
Type universe cannot resolve assembly: PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. 
    at System.Reflection.Adds.AssemblyProxy.GetResolvedAssembly() 
    at System.Reflection.Adds.AssemblyProxy.get_FullName() 
    at Microsoft.Windows.Design.Metadata.ReflectionMetadataContext.PrepareAttributes(Reflectable`1 reflectableAssembly) 
    at Microsoft.Windows.Design.Metadata.ReflectionMetadataContext.PrepareAttributes(Reflectable`1 reflectableType) 
    at MS.Internal.Metadata.ClrType.GetAttributes[T](ReflectionMetadataContext context, IReflectable`1 member, ITypeMetadata attributeType, Boolean merge, AttributeMergeCache& cache) 
    at MS.Internal.Metadata.ClrMember`1.GetLocalAttributes(ITypeMetadata attributeType) 
    at MS.Internal.Design.Metadata.Xaml.XamlType.GetSpecialProperty(Int32 idx, PropertyIdentifier pid) 
    at MS.Internal.Design.Metadata.Xaml.XamlType.get_ContentProperty() 
    at Microsoft.Windows.Design.Metadata.Xaml.XamlExtensionImplementations.GetContentProperty(ITypeMetadata sourceType) 
    at Microsoft.Windows.Design.Metadata.Xaml.XamlExtensions.GetContentProperty(ITypeMetadata source) 
    at MS.Internal.Design.Metadata.ReflectionTypeNode.get_ContentProperty() 
    at MS.Internal.Design.Markup.XmlElement.CalcChildWhitespaceImportant(XamlElement element) 
    at MS.Internal.Design.Markup.XmlElement.ConvertChildrenToXaml(XamlElement result, PrefixScope scope, IParseContext context, IMarkupSourceProvider provider, Boolean childrenAsString) 
    at MS.Internal.Design.Markup.XmlElement.ConvertToXaml(XamlElement parent, PrefixScope parentScope, IParseContext context, IMarkupSourceProvider provider) 
    at MS.Internal.Design.Markup.XmlElement.ConvertChildrenToXaml(XamlElement result, PrefixScope scope, IParseContext context, IMarkupSourceProvider provider, Boolean childrenAsString) 
    at MS.Internal.Design.Markup.XmlElement.ConvertToXaml(XamlElement parent, PrefixScope parentScope, IParseContext context, IMarkupSourceProvider provider) 
    at MS.Internal.Design.DocumentModel.DocumentTrees.Markup.XamlSourceDocument.ParseElementFromSkeleton(XamlParseContext context, SkeletonNode node, XamlElement parent, Boolean fullElement) 
    at MS.Internal.Design.DocumentModel.DocumentTrees.Markup.XamlSourceDocument.UpdateSkeleton(IDamageListener listener) 
    at Microsoft.Windows.Design.DocumentModel.Trees.MarkupDocumentTreeManager.Update() 
    at Microsoft.Windows.Design.DocumentModel.MarkupProducer.Update() 
    at Microsoft.Windows.Design.DocumentModel.MarkupProducer.HandleMessage(DocumentTreeCoordinator sender, MessageKey key, MessageArguments args) 
    at Microsoft.Windows.Design.DocumentModel.MarkupProducer.Microsoft.Windows.Design.DocumentModel.IDocumentTreeConsumer.HandleMessage(DocumentTreeCoordinator sender, MessageKey key, MessageArguments args) 
    at Microsoft.Windows.Design.DocumentModel.DocumentTreeCoordinator.SendMessage[T](MessageKey`1 key, T args, Boolean isPrivateMessage) 
    at Microsoft.Windows.Design.DocumentModel.DocumentTreeCoordinator.QueuedMessage`1.Microsoft.Windows.Design.DocumentModel.IQueuedMessage.Invoke() 
    at Microsoft.Windows.Design.DocumentModel.DocumentTreeCoordinator.ProcessQueuedMessages(Object state) 
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) 

Répondre

3

Juste au moment où je suis sur le point de poster la question, les balises StackOverflow suggestions automatiques a montré qu'il existe Silverlight Toolkit. C'est clairement ce que je devrais utiliser.

Depuis que j'ai mis autant d'effort dans la question, je vais laisser la question et la réponse comme un testemant à StackOverflow awesomeness en répondant automatiquement à ma question.

EDIT Vous devez disposer de binaires Silverlight 3 Toolkit pour utiliser DataGrid. Vous devez ajouter ces quatre références au projet:

  1. System.ComponentModel.DataAnnotations.dll
  2. System.Windows.Controls.Data.dll
  3. System.Windows.Controls.Data.Input.dll
  4. System.Windows.Data.dll