Ich versuche, einen Videoplayer zu erstellen, der mehrere Videos gleichzeitig wiedergeben kann. Ich habe Spieler dazu gebracht zu arbeiten und jetzt versuche ich einem Nutzer zu erlauben, zur Laufzeit zusätzliche Videos hinzuzufügen. Ich zeige Videos in einem einheitlichen Raster an, das anhand eines Konverters entscheidet, wie viele Zeilen und Spalten basierend auf der Anzahl der Videos generiert werden sollen. Es funktioniert gut, wenn Sie definieren, wie viele Spieler vor dem Ausführen vorhanden sind. Wenn ich jedoch einen Player hinzufüge, während er ausgeführt wird, aktualisiert das einheitliche Raster die Zeilen oder Spalten nicht. Es fügt einfach ein anderes Video zu der Struktur hinzu, die es zuvor hatte. Gibt es trotzdem, dass ich es zwingen kann, die Zeilen/Spalten neu zu bewerten?Neubewertung von UniformGrid-Zeilen und -Spalten WPF
TL; DR: Kann ich die Zeilen und Spalten eines gleichmäßigen Gitters bei der Anzeige neu berechnen? Wie ?
Die XAML für die Kontrolle ist unten. Weitere Informationen Benutzer die hilfreich sein könnten:
1. Spieler ist ein ObservableCollection
2. Die Steuerung mit einem TabControl
<UserControl x:Class="Views.AllVideos"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-Views"
mc:Ignorable="d">
<ItemsControl ItemsSource="{Binding Players}"
x:Name="AllVideosControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="{Binding Players, Converter={StaticResource CountToColumns}, Mode=OneWay}"
Rows="{Binding Players, Converter={StaticResource CountToRows}, Mode=OneWay}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="{DynamicResource AccentBrush}"
BorderThickness="1"
Margin="5">
<ls:PanelPreview DataContext="{Binding}"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</UserControl>
http://stackoverflow.com/questions/15178726/setting-rows-of-itempaneltemplate-uniformgrid-through-c-sharp – StepUp
Sind Sie 'Property ("Spieler")' jedes Mal, wenn die Anhebung * Zahl * von Spielern ändert sich? Weil dort nichts für mich sichtbar ist, um diese Bindungen zu aktualisieren, wenn sich die Anzahl ändert. Wenn Sie CountToColumns und CountToRows so umschreiben können, dass sie einen Int enthalten, können Sie auch einfach '{Binding Items.Count, RelativeSource = {RelativeSource Self}}, Converter = {StaticResource CountToColumns}}' verwenden. –
Eigentlich scratchen: Ich habe es gerade getestet und 'Rows =" {Binding Players.Count} 'funktioniert perfekt für mich - wenn' Player' eine 'ObservableCollection' ist. Ist es? Wenn das der Fall ist, würde ich diese Konverter einfach neu schreiben, um Players.Count zu nehmen, modulo und fertig. –