Laden...

Eigenes UserControl verhält sich nicht wie ParentControl

Erstellt von IamTheBug vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.020 Views
I
IamTheBug Themenstarter:in
401 Beiträge seit 2006
vor 8 Jahren
Eigenes UserControl verhält sich nicht wie ParentControl

Hallo,

ich habe folgendes Problem. Ich habe ein Eigenes USerControl erstellt "ExtendedListview" das ganze leite von Listview ab. Es ist noch nichts weiter darin implementiert. Das Control wird auch in der Toolbox angezeigt.


public class ExtendedListView : ListView
{
}

Im XAML habe ich das original ListView so verwendet:


                <ListView ItemsSource="{Binding Personen}" Background="AliceBlue"  Grid.Row="1" Grid.RowSpan="1">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                                <StackPanel>
                                    <TextBlock Text="{Binding Name}"/>
                                    <TextBlock Text="{Binding Alter}"/>
                                </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                    <ListView.ItemsPanel>
                        <ItemsPanelTemplate>
                            <WrapPanel/>
                        </ItemsPanelTemplate>
                    </ListView.ItemsPanel>
                </ListView>

somit wurden die Element wunderbar nebeinander vom wrappanel dargestellt.

nutze ich aber das gleiche Beispiel mit meinem ExtendedViewList geht nix 😦


                <local:ExtendedListView ItemsSource="{Binding Personen}" Background="AliceBlue"  Grid.Row="1" Grid.RowSpan="1">
                    <local:ExtendedListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Name}"/>
                                <TextBlock Text="{Binding Alter}"/>
                            </StackPanel>
                        </DataTemplate>
                    </local:ExtendedListView.ItemTemplate>
                    <local:ExtendedListView.ItemsPanel>
                        <ItemsPanelTemplate>
                            <WrapPanel/>
                        </ItemsPanelTemplate>                        
                    </local:ExtendedListView.ItemsPanel>
                </local:ExtendedListView>

Nichtmal der gesetzte Hintergrund wird aktiv.

Füge ich aber folgendes hinzu (was durch den automatisch erzeugen Code von Visual Studio dabei war:


                    <local:ExtendedListView.View>
                        <GridView>
                            <GridViewColumn/>
                        </GridView>
                    </local:ExtendedListView.View>

sehe ich den hintergrund aber natürlich greift dann mein Template nicht und die Elemente werden nicht so dargestellt wie ich es vorher wollte.

Woran liegt das?

Vielen Dank.

Edit:
Ein weiteres Problem kommt noch hinzu. Mir fällt gerade auf das die Elemente nicht "Wrappen" trotz der Verwendung eines WrapPanels. Woran liegt das? ISt der oben gewählte Ansatz generell falsch?
Mein Ziel war eine Listview zu haben indem Elemente als Bilder dargestellt werden (im moment wid das noch nicht gemacht) und von links nach rechts und oben nach unten angeordnet sind.

Mfg

IamTheBug

I
IamTheBug Themenstarter:in
401 Beiträge seit 2006
vor 8 Jahren

Ok,

dann erstelle ich zu dem zweiten Problem schon einmal selber eine Antwort. Ich habe das eben herausgefunden 😃

Am ListView muss folgendes gesetzt werden:

ScrollViewer.HorizontalScrollBarVisibility="Disabled"

ItemTemplate sagt nur wie die Elemente gerendert werden sollen aber es hat keinen Effect auf das Layout. Das macht ja immer noch ListView wie es lustig ist.
So habe ich das zumindest verstanden und mir zusammen gereimt. 😃

Mfg

IamTheBug

M
6 Beiträge seit 2015
vor 8 Jahren

Hi IamTheBug,

zu Deinem ersten, ungelösten Problem: Ich hab das mal fix nachgebaut, und es funktioniert bei mir ohne Probleme. Stackpanel/WrapPanel werden so angezeigt wie in der normalen ListView. Der Fehler muss leider irgendwo anders liegen. Nachstellen kann ich das nur, wenn ich einen falschen Namen für das Binding eingebe, also keine gültige Quelle vorhanden ist.

Viele Grüße,
Marcel