2010-11-09 5 views
1

J'ai un ScatterViewItem qui contient une toileScatterViewItem Custom Shape

   <Ellipse x:Name="Outer_Ellipse" Fill="White" Width="200" Height="200"></Ellipse> 
       <Ellipse Fill="Red" Canvas.Top ="15" Canvas.Left="15" Canvas.Right="15" Canvas.Bottom="15" Width="170" Height="170" ></Ellipse> 

      </Canvas> 
     </s:ScatterViewItem> 

Id aiment fournir une forme personnalisée de sorte que la forme du rectangle par défaut est montre pas (ici une photo de mon courant la mise en œuvre alt text.

J'ai suivi cet exemple ici link text et ont consulté le casse-tête qui vient avec le SDK, mais je suis incapable de le faire fonctionner, mon ScatterViewItem est vide.

I défini un chemin dans les SurfaceWindow.Resources

<Path x:Key="ScatterShape" Fill="Blue"> 
     <Path.Data> 
      <EllipseGeometry 
       RadiusX="200" 
       RadiusY="200"> 
      </EllipseGeometry> 
     </Path.Data> 
    </Path> 

Et copier les attributs de style à partir du lien ci-dessus. J'ai créé mon CustomShape.cs comme indiqué et ensuite créé le ScatterViewItem.

System.Windows.Shapes.Path path; 
path = (System.Windows.Shapes.Path)Resources["ScatterShape"]; 
CustomShape poly = new CustomShape(path.Data); 
ScatterViewItem item = new ScatterViewItem(); 
item.Content = poly; 
item.CanScale = false; 
Binding binding = new Binding(); 
binding.Source = poly; 
item.SetBinding(ScatterViewItem.DataContextProperty, binding); 
scatter.Items.Add(item) 

Im légèrement confondu avec le code ci-dessus depuis mon accord avec la ligne

item.Content = poly 

écraserait le contenu du ScatterViewItem (i.e. dans mon cas la toile ou dans un autre cas dire une image). Pour l'instant, je n'ai pas besoin de déplacer ou de mettre à l'échelle l'objet ScatterView, donc aucune ombre n'est nécessaire. Je veux simplement retirer la boîte rectangulaire.

Répondre

4

Vous pouvez y parvenir en modifiant ControlTemplate pour le ScatterViewItem.

Si vous souhaitez supprimer toutes les caractéristiques visuelles du ScatterView alors je suppose que vous pourriez sortir avec un modèle vide:

<Style TargetType="{x:Type s:ScatterViewItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type s:ScatterViewItem}"> 
      <ContentPresenter /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Le modèle ci-dessus changera tous les éléments de ScatterView d'avoir un modèle vierge, mais vous pouvez lui donner un x:Key="YourStyleName" et définir le ItemContainerStyle du ScatterView en question pour affecter uniquement cette vue de dispersion.

Veuillez noter que si vous utilisez Expression Blend, vous devrez peut-être ajouter une référence à Microsoft.Surface.Presentation.Generic.dll pour ce faire ou Blend peut se bloquer lors de la modification du modèle.

+0

Merci pour la réponse, vraiment appréciée. J'avais passé des heures à essayer de suivre l'exemple du puzzle dans le SDK et je n'avais nulle part où. Je n'avais pas réalisé à quel point il était simple d'utiliser le ControlTemplate. – Bear

1

Vous pouvez également supprimer l'ombre pour que le ScatterViewItem ne soit plus visible.

En supposant que votre article est ScatterViewItem:

item.ApplyTemplate(); 
item.Background = new SolidColorBrush(Colors.Transparent); 
item.ShowsActivationEffects = false; 
Microsoft.Surface.Presentation.Generic.SurfaceShadowChrome ssc; 
ssc = item.Template.FindName("shadow", item) as Microsoft.Surface.Presentation.Generic.SurfaceShadowChrome; 
ssc.Visibility = Visibility.Hidden; 
0

J'ai le même problème. Voici mon code.

<s:ScatterView> 
    <s:ScatterView.Items> 
     <s:ScatterViewItem Height="1721" Width="2169">     
      <Canvas > 
       <Path Data="M0 2728 l0 -1012 28 26 c23 21 32 24 61 17 31 -6 40 -3 75 27 38 32 99 114 92 122 -6 5 -46 -21 -46 -30 0 -15 -56 -58 -75 -58 -29 0 -105 74 -105 102 0 12 14 37 32 55 31 32 32 34 20 78 -20 74 -17 82 29 89 22 4 44 4 49 1 13 -8 23 54 11 69 -8 10 -6 17 8 30 12 11 16 25 13 41 -4 24 -3 25 24 15 25 -10 31 -9 43 9 7 12 24 21 37 21 25 0 30 10 14 26 -5 5 -7 20 -3 32 7 29 34 25 48 -6 12 -27 20 -28 38 -1 13 18 24 20 74 18 32 -2 173 -2 314 -1 l256 2 12 113 c6 61 12 191 12 287 1 96 5 182 10 191 14 27 76 61 98 54 24 -7 29 -20 37 -103 10 -106 29 -115 65 -33 24 57 70 104 95 99 10 -1 29 -25 43 -53 37 -72 66 -79 141 -38 78 44 123 50 180 25 88 -38 122 -38 197 0 64 31 75 33 193 36 77 3 145 -1 177 -9 45 -10 61 -10 115 5 135 37 121 41 253 -81 64 -59 124 -111 133 -114 27 -10 473 0 515 12 47 12 84 47 92 86 22 99 71 155 143 159 27 2 79 17 118 34 46 21 97 35 153 41 64 7 100 18 150 44 36 19 86 37 111 41 25 4 65 17 90 29 52 26 113 39 140 30 29 -9 25 -49 -10 -89 -25 -28 -29 -38 -21 -59 5 -14 15 -28 21 -32 12 -8 3 -73 -13 -94 -16 -19 17 -43 103 -76 66 -25 80 -27 188 -23 109 4 121 6 176 36 32 18 67 32 77 32 25 0 24 12 -1 35 -13 12 -20 29 -18 44 2 21 10 27 38 32 39 6 102 40 140 75 23 21 30 22 64 13 52 -14 82 -5 94 30 8 22 18 30 45 35 37 7 73 38 63 55 -9 14 -94 40 -158 47 l-58 7 0 87 c0 48 -3 90 -7 93 -3 4 -5 35 -4 70 3 73 24 102 105 142 l50 25 -2592 0 -2592 0 0 -1012z" Stroke="Black"></Path> 
.... 
.... 
    </Canvas> 
     </s:ScatterViewItem> 
    </s:ScatterView.Items> 
</s:ScatterView> 

Il y a tellement de formes dans la toile et la taille de la toile est également beaucoup plus élevée. donc quand j'exécute l'application, la toile ne reçoit pas la taille re quand je taille la ScatterViewItem. Et Evènement le canevas montré en dehors du ScatterViewItem.