Laden...

Databinding via ObservableCollection - Button Problem

Erstellt von ogre vor 11 Jahren Letzter Beitrag vor 11 Jahren 964 Views
O
ogre Themenstarter:in
123 Beiträge seit 2006
vor 11 Jahren
Databinding via ObservableCollection - Button Problem

Hallo ich habe folgendes Problem,

ich möchte an ein ItemsControl eine ObserableCollection<KoordinatenObject> binden. Das KoordinatenObject soll in dem ItemsControl als Button dargestellt werden, es enthält die Properties X,Y,Höhe und Breite. Das Ergebnis sollte in etwa so aussehen


| Button1 |    Button2    |          Button3       |Button4|    Button5     |
|     Button1     |    Button2    |        Button3        |      Button4    |
|Button1|Button2 | Button3 | Button4 | Button5 | Button6 |      Button7     |
| Button1 |    Button2    |          Button3       |Button4|    Button5     |

.
.
.

... mein XAML Code sieht wiefolgt aus


<ItemsControl Background="Red" ItemsSource="{Binding Path=Sh}" HorizontalAlignment="Left"
                      VerticalAlignment="Top">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical">
                        <Button HorizontalAlignment="Left" 
                            VerticalAlignment="Top"
                                    BorderThickness="0" 
                                    BorderBrush="Black"  
                                    Width="20" Height="{Binding Path=Height}" 
                                    Margin="{Binding Path=ShLocation,Converter={StaticResource PointToMargin}}"
                                    Content="{Binding Path=ShNumber}" />
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
     </ItemsControl>

Der Margin (PointToMargin Converter) soll die X,Y Koordinenen bestimmen,also 0,0,0,0 ; 90,0,0,0 ; 180,0,0,0 zweite Zeile 0,30,0,0 ; 45,30,0,0 ; 90,30,0,0 usw.
Leider funktioniert das nicht so das ergebnis sieht wiefolgt aus:

|Button 1|
                    |Button 2|
                                      |Button 3|

Mit meiner Methode ist es also offensichtlich nicht möglich in einen ItemsControl die Buttons hintereinander zu zeichnen. Die Buttons sind nach unten versetzt die Y - Koordinate im Margin wird also ignoriert ?!?

Erfolgt die Auflstung innerhalb des ItemsConrol in einen StackPanel?
Was mach ich falsch? Kann man das Problen mit einem ItemsControl Überhaupt lösen? Sollte ich die Anordnung der Buttons mittels Margin festlegen, gibt es da andere/bessere möglichkeiten?

thx ogre

6.862 Beiträge seit 2003
vor 11 Jahren

Hallo,

Erfolgt die Auflstung innerhalb des ItemsConrol in einen StackPanel? Ja, zumindest defaultmäßig wenn man nichts anderes einstellt.
Die Idee von dir ist gar nicht schlecht. Scheitern tut es aber schon im Ansatz daran, das du ja im Template ebenfalls nen StackPanel hat. Sprich der Button wird im Template schon richtig mit dem Margin angeordnet, aber auch nur im inneren StackPanel, das ItemsControl weiß von dem aber gar nichts und bekommt die ganzen StackPanels als Children welche es wiederum ganz normal anordnet.

Setzt als ItemsPanel ein Canvas und verwende statt Margin die attached Properties von Canvas um die Position der Items dort drin zu setzen. Es macht keinen Sinn StackPanels zu verwenden, wenn du eigentlich absolut positionieren willst.

Baka wa shinanakya naoranai.

Mein XING Profil.

O
ogre Themenstarter:in
123 Beiträge seit 2006
vor 11 Jahren

hallo talla,

danke für den tipp, jetzt funktioniert es 😁

ogre