Ich möchte ein horizontales Layout erstellen, das an eine Liste von Objekten mit einigen anzuzeigenden Informationen gebunden ist. Ich möchte die Größe der Steuerelemente in diesem Steuerelement, um das Steuerelement zu füllen, wie das UniformGrid tut. Die Sache ist, ich möchte nicht die Breiten der Kontrolle gleichmäßig verteilt werden, sondern eher gewichtet, basierend auf einer Eigenschaft im Objekt selbst.Gewichtete Verteilung von untergeordneten Elementen in ItemsControl
dachte ich ein Item mit einem benutzerdefinierten Itemspaneltemplate eine gute Strategie sein würde, weil es mit einem Uniform gut funktioniert:
<ItemsControl x:Name="itemsControl" ItemsSource="{Binding MyResults}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="1">
<TextBlock Width="{Binding Weight}" Text="{Binding Weight}" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Bound der Ansicht Modell:
public class MainViewModel : PropertyChangedBase
{
public List<MyTestClass> MyResults { get; set; } = new List<MyTestClass>()
{
new MyTestClass() { Weight = 25 },
new MyTestClass() { Weight = 50 },
new MyTestClass() { Weight = 25 }
};
}
public class MyTestClass
{
public int Weight { get; set; }
}
Eine Idee ist Wechseln Sie in ein gewöhnliches Grid und verwenden Sie das ColumnDefinitions * -Breite-Verhalten (wie (25*,50*,25*)
aber gebunden als Weight*
), aber ich kann nicht herausfinden, wie das geht.
Das sieht wie eine wirklich nette Lösung aus. Aber ich brauche horizontalen Fluss. Ich werde versuchen, dies anzupassen, um eine horizontale Ausrichtung zu verwenden. – FishySwede
Ich änderte die ArrangeOverride zu tun: {var width = finalSize.Width * Gewicht/totalWeight_; child.Arrange (neues Rect (neuer Punkt (Offset, 0), neue Größe (width, finalSize.Height))); Offset + = Breite;}. Wenn Sie Ihre Antwort mit diesem aktualisieren, werde ich mehr als glücklich, es als die Antwort auf meine Frage zu akzeptieren – FishySwede