コメントで言っていることに基づいて、ボタンで動的な数の動画を作成し、グリッドにうまく表示したいようです。
ObservableCollection<VideoPlayer>
まず、必要なビデオの数を保持するをDataContextに作成し、VideoPlayerCollection.Count
グリッドサイズを決定するために切り上げられたの平方根を含む2番目のプロパティを作成します。
次に、またはに設定されているVideoPlayerCollection
を使用して表示します。これにより、行数と列数がプロパティにバインドされます。ItemsControl
ItemsPanelTemplate
UniformGrid
Grid
GridSize
(グリッドには行/列カウントプロパティがないため、これらのプロパティをバインドするためにいくつかを構築する必要がある場合があります。また、UniformGridとプロパティがバインドできるAttachedProperties
かどうかを思い出せません。いくつかの例があります。例に興味がある場合は、ここでRowCountとColumnCountをバインドするためのAttachedProperties )Rows
Columns
DependencyProperties
Grid's
そして最後に、ボタンは、VideoPlayerCollection
表示したい数のアイテムを追加または削除するように変更します。
したがって、最終的なXAMLは次のようになります。
<DockPanel>
<StackPanel DockPanel.Dock="Left">
<Button Content="One Window"
Command="{Binding ModifyVideoCountCommand}"
CommandParameter="1" />
<Button Content="Two Windows"
Command="{Binding ModifyVideoCountCommand}"
CommandParameter="2" />
<Button Content="Four Windows"
Command="{Binding ModifyVideoCountCommand}"
CommandParameter="4" />
</StackPanel>
<ItemsControl ItemsSource="{Binding VideoPlayerCollection}"
ItemTemplate="{StaticResource VideoPlayerTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="{Binding GridSize}" Columns="{Binding GridSize}" />
</ItemsPanelTemplate>
</ItemsPanelTemplate>
</ItemsControl>
</DockPanel>
フォームのDataContext
背後には次のプロパティが含まれます。
ICommand ModifyVideoCountCommand { get; set; }
ObservableCollection<VideoPlayer> VideoPlayerCollection { get; set; }
int GridSize
{
get
{
return Math.Ceiling(Math.Sqrt(VideoPlayerCollection.Count));
}
}
を使用するかどうかによっては、クラスにプロパティを追加して、どのVideoPlayerを配置するかを指定Grid
する必要がある場合もあります。RowIndex
ColumnIndex
VideoPlayer
Grid.Row
Grid.Column
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column"
Value="{Binding ColumnIndex}" />
<Setter Property="Grid.Row"
Value="{Binding RowIndex}" />
</Style>
</ItemsControl.ItemContainerStyle>