Wie verwenden von Canvas als ItemsPanel für ein ItemsControl, die in Silverlight 3
Ich versuche, legen Sie die Leinwand-Eigenschaften in einem ItemsControl DataTemplate mit Silverlight 3. Nach dieser Beitrag, der einzige Weg, dies zu tun ist, um es mit dem ItemsContainerStyle für den ContentPresenter geben, da die Leinwand Eigenschaften wirken nur auf die direkten Kinder von der Leinwand. Dies scheint nicht zu funktionieren in SL3, da das ItemsControl ist nicht eine ItemsContainerStyle Eigenschaft, so versuchte ich eine ListBox, wie angeraten durch dieser Artikel, aber es funktioniert immer noch nicht. Aus der XAML-unten, würde ich erwarten, sehen Sie ein grünes Quadrat mit den zahlen 10, 30, 50, 70 Kaskadierung von "NW" zu "SE" Richtung. Kann mir jemand sagen, warum Sie alle gestapelt oben auf einander in der NW-Ecke?
<UserControl x:Class="TestControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib" >
<StackPanel>
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="Green" Width="100" Height="100" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding}" />
<Setter Property="Canvas.Top" Value="{Binding}" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.Items>
<System:Int32>10</System:Int32>
<System:Int32>30</System:Int32>
<System:Int32>50</System:Int32>
<System:Int32>70</System:Int32>
</ListBox.Items>
</ListBox>
</StackPanel>
</UserControl>
- Dank der skb, das beantwortet meine Frage, die war, wie dies in WPF 🙂 Wie Sie sagen, es funktioniert Super in WPF.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, ob es in deinem Szenario, aber ich hab Sie erreicht dies in der Vergangenheit mit der RenderTransform.
Oder im Falle der Bindung müssen Sie einen Konverter verwenden
Konverter
Silverlight4 nicht binden zu angefügten Eigenschaften in der Art. Ich schlage vor, mit David Anson ' s Ansatz beschrieben hier.
Und in listbox:
Alte post, aber ich ging in das gleiche problem, aber jetzt mit SL5, dass ermöglicht jetzt
Binding
im Stil-setter. Ich habe versucht zu vermeiden, um dasListBox
(denn es behandelt die Auswahl und so weiter) und dieItemsControl
immer noch nicht über eineItemContainerStyle
. Also ich habe versucht ein paar Dinge.Habe ich noch nicht gefunden, viele Thema über dieses problem, so teilen Sie mit mir meine Lösung (sorry, wenn es Duplikate)
In der Tat fand ich ein sehr bequemer Weg, um das problem zu lösen, indem eine Unbenannte
Style
imItemsControl
Ressourcen :Funktioniert wie ein Charme in SL5 🙂
Ich kann nicht erklären, was Sie sehen, entweder. Xaml ist gebrochen, zumindest ein paar Möglichkeiten.
Zunächst der Xaml-Code selbst scheitert, weil dieser:-
sollte
dem Item-Container im Fall von
ListBox
TypListBoxItem
die sich ausContentControl
.Immer noch ohne, dass die Platzierung von {Binding} - in Stil-setter noch nicht funktioniert. Ich denke, Sie waren sich vorzustellen, dass der Stil angewendet werden würde, um jedes Element in der Reihe und bekommt seinen Wert aus dem aktuellen Objekt. Aber selbst bei verbindlich arbeitete in der Art, es wäre nur eine Stil, und es würde seine Daten Bindung aus der ListBox
DataContext
. Dies ist eine andereDataContext
das gilt für jede ListBox-Element (in diesem Fall ist jedes Element in der Sammlung "Items").Immer noch ich denke, Ben hat eine vernünftige Lösung einsetzen, die nicht mit diesem Ansatz.
Value
Eigentum der Stil wäre gebunden an die gemeinsam - Wert (N. B. nicht die Bindung selbst) und würde verwendet werden, die über alle Elemente. Schließlich sogar wenn alles, was sonst arbeitete der TargetType ist falsch.