J'essaye simplement de définir le remplissage de tous les éléments rectangle du deuxième panneau de pile (des deux dans le stackpanel racine), le nécessaire remplir étant blanc. Puisqu'un stackpanel n'a pas ItemTemplate, j'ai essayé de le remplacer par, puis de l'encapsuler avec ItemsControl. L'encapsulation du panneau de pile est arrivée quand j'ai vu que ItemsControl n'a pas de propriété Orientation.Appliquer un style à tous les éléments enfants d'un certain stackpanel (ou commande)
De toute façon, après tout cela, les rectangles enfants ne sont toujours pas remplis de blanc ...>. < qu'est-ce que je fais mal?
(J'essaie aussi de faire la même chose avec les bindings d'événements comme How to set an event function via a style? Je suis toujours en train d'essayer des choses là-bas, je pensais que je voulais aussi le faire via ItemControl.)
<Window x:Class="RegenboogDragDrop.WindowRegenboog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WindowRegenboog" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type Rectangle}">
<Setter Property="Height" Value="50"></Setter>
<Setter Property="Width" Value="50"></Setter>
<Setter Property="Margin" Value="5"></Setter>
<Setter Property="Stroke" Value="Black"></Setter>
<Setter Property="StrokeThickness" Value="3"></Setter>
</Style>
</Window.Resources>
<StackPanel>
<StackPanel Margin="0,50" Orientation="Horizontal" HorizontalAlignment="Center">
<Rectangle Fill="Yellow" MouseMove="Rectangle_MouseMove"></Rectangle>
<Rectangle Fill="Orange" MouseMove="Rectangle_MouseMove"></Rectangle>
<Rectangle Fill="Red" MouseMove="Rectangle_MouseMove"></Rectangle>
<Rectangle Fill="Blue" MouseMove="Rectangle_MouseMove"></Rectangle>
<Rectangle Fill="Green" MouseMove="Rectangle_MouseMove"></Rectangle>
<Rectangle Fill="Violet" MouseMove="Rectangle_MouseMove"></Rectangle>
<Rectangle Fill="Indigo" MouseMove="Rectangle_MouseMove"></Rectangle>
</StackPanel>
<ItemsControl Name="DropZone" HorizontalAlignment="Center">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Rectangle Fill="White"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
<StackPanel Orientation="Horizontal">
<Rectangle Name="dropRed" Fill="White"/>
<Rectangle Name="dropOrange" MouseMove="Rectangle_MouseMove" DragDrop.DragEnter="Rectangle_DragEnter" DragDrop.DragLeave="Rectangle_DragLeave" DragDrop.Drop="Rectangle_Drop" AllowDrop="True"></Rectangle>
<Rectangle Name="dropYellow" Fill="White" MouseMove="Rectangle_MouseMove" DragDrop.DragEnter="Rectangle_DragEnter" DragDrop.DragLeave="Rectangle_DragLeave" DragDrop.Drop="Rectangle_Drop" AllowDrop="True"></Rectangle>
<Rectangle Name="dropGreen"></Rectangle>
<Rectangle Name="dropBlue"></Rectangle>
<Rectangle Name="dropIndigo"></Rectangle>
<Rectangle Name="dropViolet"></Rectangle>
</StackPanel>
</ItemsControl>
<Button Name="ButtonCheck" Content="Check volgorde" Margin="5,50"></Button>
</StackPanel>
code
derrière si vous voulez l'essayer: (Sur la deuxième ligne du troisième carré peut recevoir des couleurs par glisser-déposer, tandis que le second a tous les événements, mais pas le remplissage nécessaire que je suis en train d'essayer) (DutchVarsTo Anglais: rechthoek signifie carré, kleur signifie la couleur, gesleepteKleur signifie draggedColor, sommeil signifie glisser):
https://defuse.ca/b/c19ncFwllWIpSRe6I0cclp (je ne peux pas comprendre comment réduire un C# snippet comme les js snippet ici https://meta.stackexchange.com/questions/70885/collapse-code-snippets-in-answers: S lien si pastebin à codebehind)
Une solution élégante et vous avez un upvote de moi dès que j'accepte une réponse (alors j'aurai 15 rep), mais dans ce cas, j'essaie d'apprendre à faire quelque chose (style enfants éléments de stackpanel) donc ce serait un hack pour moi. On pourrait imaginer qu'il y a une troisième rangée de boîtes qui ont besoin d'être remplies de gris (pour, disons, faire un arc-en-ciel inversé). J'aimerais savoir comment le faire sans piratage (c.-à-d.créer un sous-type de rectangle spécial ou quelque chose dans cette plage) – DeveloperDoge
Vous ne savez pas exactement ce que vous entendez par "hack". Pour le style des éléments enfants d'un élément parent, c'est le chemin. Sinon, vous devrez créer des styles avec un 'x: Key' dans un dictionnaire de ressources de premier niveau, et les affecter explicitement à la propriété' Style' d'un élément. – Clemens
aaaah oui je viens de voir ce que vous vouliez dire, vous le faites dans StackPanel.Resources! Comment puis-je utiliser BasedOn = "..." ici pour l'incorporer au style ci-dessus. – DeveloperDoge