ListView mit dynamischer Breite
Hallo zusammen
Ich versuche aktuell ein Template für eine ListView zu erstellen welches eine dynamische Breite hat. Dabei sollen zwei Textboxen auf einer Zeile sein, die erste Soll ganz Links sein mit einem Text und ganz rechts soll der dazugehörige Wert angezeigt werden.
Ungefähr so:
| TextEintrag 66|
Jedoch bring ich es dynamisch nur so hin:
| TextEintrag66 |
Ich habe versucht mit einem Grid die Ausrichtung auf Links und rechts zu stellen, und die Breite auf automatisch zu lassen. Ausserdem habe ich es auch schon mit Stackpanels mit einer Horizontalen Ausrichtung versucht und sonst noch diverses querbeet.
Meine Temporäre Lösung ist nun das ich den Texteintrag einfach Minimum 300px gross habe. Das wird aber auf einem Display mit grösserer Auflösung nicht sonderlich gut kommen (ausser das würde hoch skaliert werden?).
Hat jemand eine Idee wie ich das lösen kann? o.O
Gruss
NPadrutt
AW: ListView mit dynamischer Breite
Wenn du in Silverlight unterwegs bist dann werden die Pixelwerte der Offsets skaliert. D.h. wenn 300 px eingestellt sind, dann sinds eben bei einem 800x480 px Display wirklich 300 px, bei einem 720p Gerät oder 1080p Gerät sinds dementsprechend mehr.
Was du sonst probieren kannst ist dass du mit den Margin's arbeitest bei den einzelnen Controls und am Control halt einstellst wo sie sich ausrichten sollen.
AW: ListView mit dynamischer Breite
Danke für deine Antwort.
Also versucht habe ich das bei einem WinRT App für WP8.1. Das mit den Margins habe ich versucht. Hat aber leider nicht so geklappt wie ich mir das erhofft habe.
Beim skalieren ist 800*480 die Ausgangslage oder ist das abhängig von einer Einstellung?
AW: ListView mit dynamischer Breite
Ok, WinRT - da verhält sich das XAML anders als in WP-Silverlight (bei Silverlight werden die Elemente so groß wie ihnen das Grid z.B. halt maximal Platz zugesteht. Bei WinRT bleiben sie so klein wie nötig. Am Control gibts ein Property mit dem du das Verhalten dem von SL anpassen kannst (weiß aber grad nicht auswendig wies heißt). Dann sollte die interne Ausrichtung des Controls ziehen.
Das mit dem 800x480 war auch nur beim Silverlight WP so - WinRT ist da voll dynamisch. Bin selbst aber eher aus der Silverlight-Ecke, muss mir die WinRT Variante noch genauer ansehen (bin da gerade an einem Lernprojekt aber leider grad wenig Zeit).
AW: ListView mit dynamischer Breite
Ah, alles klar. Also am Control, sprich meinem UserControl oder der entsprechenden Liste / Grid / Textbox?
AW: ListView mit dynamischer Breite
Sollten VerticalAlignment und HorizontalAlignment sein beim im Grid enthaltenen Control - die sollten auf Stretch stehen. Kanns genau aber erst daheim sagen - da hab ich das schon mal wo verwendet.
AW: ListView mit dynamischer Breite
Dachte das Stretch habe ich gesetzt, aber bin grad nicht mehr sicher. Ich versuch das heute Abend mal und erstatte Bericht. Schonmal vielen Dank.
AW: ListView mit dynamischer Breite
Also wenn ich mit horizonal alignment auf stretch stelle klappt es leider nicht. Aktuell nutze ich ein Grid. Da ist es dann einfach überlagert..
AW: ListView mit dynamischer Breite
Überlagert? Kannst du einfach mal den XAML Code von deinem ItemTemplate posten? Dann spiel ich mich direkt mit dem.
AW: ListView mit dynamischer Breite
Ich habe die Änderungen hier bereits wieder Rückgängig gemacht, aber mein Code hier sieht so aus:
Code:
<UserControl
x:Class="MoneyTracker.UserControls.AccountListUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<UserControl.Resources>
<DataTemplate x:Key="AccountTemplate">
<StackPanel Margin="0,0,0,12" HorizontalAlignment="Stretch"
MinWidth="300" Holding="AccountList_Holding">
<FlyoutBase.AttachedFlyout>
<MenuFlyout>
<MenuFlyoutItem x:Uid="Delete" Text="Delete" Click="Delete_OnClick" />
<MenuFlyoutItem x:Uid="Edit" Text="Edit" Click="Edit_OnClick" />
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
<Grid HorizontalAlignment="Stretch">
<TextBlock Style="{StaticResource MenuItemText}" Text="{Binding Name}" />
<TextBlock Style="{StaticResource MenuItemText}" Text="{Binding CurrentBalance}"
HorizontalAlignment="Right" TextAlignment="Right" />
</Grid>
<TextBlock Style="{StaticResource MenuItemSmallText}" Text="{Binding Iban}" />
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<StackPanel>
<ListView Name="AccountList" ItemsSource="{Binding AllAccounts}"
ItemTemplate="{StaticResource AccountTemplate}"
HorizontalAlignment="Stretch" SelectionChanged="AccountList_OnSelectionChanged" />
</StackPanel>
</UserControl>
Aktuell ist noch ein MinWidth =300 drin.
Was mit gerade vorher noch in den Sinn gekommen ist: Muss ich vielleicht das UserControl auf Stretch setzten?
Gruss
NPadrutt
AW: ListView mit dynamischer Breite
Im Grid fehlen die Columndefinitions. Und die enthaltenen TextBlock Elemente sind dann auch keiner Column zugeordnet. Daher ist es dann auch so dass sie bei Stretch übereinander liegen.
Schau dir mal an wie das hier in dem Artikel definiert ist - da sieht mans recht schön: http://msdn.microsoft.com/en-us/libr.../hh465337.aspx
AW: ListView mit dynamischer Breite
Hab den Beitrag jetzt nur überflogen. Willst du denn Content immer über die gesamte breite stretchen, wenn ja dann müsste das hier helfen
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListBox.ItemContainerStyle>
Mit der kostenlosen
PocketPC.ch App von meinem RM-821_eu_euro2_248 aus geschrieben.
---------- Hinzugefügt um 11:36 ---------- Vorheriger Beitrag war um 11:25 ----------
Du musst natürlich noch listbox durch Listview und listboxitem durch Listviewitem ersetzen
Mit der kostenlosen
PocketPC.ch App von meinem RM-821_eu_euro2_248 aus geschrieben.
AW: ListView mit dynamischer Breite
Mit den Grid Columns hat s leider nicht geklappt (oder ich habs zumindest nicht geschafft ;) ). Die Überlagerung war zwar weg, aber die Ausrichtung leider immernoch direkt hintereinander.
Jedoch hats mit Akunz Idee geklappt:
Code:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Danke euch beiden =)