我想製作可以顯示1或2個視頻的應用程序。如何在WPF中以動態數字格式顯示動態數量的對象?
在窗口的左側部分,將會有2個按鈕標記爲「1」或「2」,作爲要在應用程序右側顯示的圖塊的數量。
通過點擊「1」,視頻將在整個右側播放。
通過點擊「2」,將會在右側顯示2個視頻中的2個視頻。
現在,它是唯一一個顯示1個視頻的完整窗口圖塊,另一個圖塊將完整窗口分成2個並顯示2個視頻,但是如果我需要4個視頻,我想將主窗口分割爲4個並顯示4個不同的視頻。
實現此目的的最佳方法是什麼?
謝謝!
我想製作可以顯示1或2個視頻的應用程序。如何在WPF中以動態數字格式顯示動態數量的對象?
在窗口的左側部分,將會有2個按鈕標記爲「1」或「2」,作爲要在應用程序右側顯示的圖塊的數量。
通過點擊「1」,視頻將在整個右側播放。
通過點擊「2」,將會在右側顯示2個視頻中的2個視頻。
現在,它是唯一一個顯示1個視頻的完整窗口圖塊,另一個圖塊將完整窗口分成2個並顯示2個視頻,但是如果我需要4個視頻,我想將主窗口分割爲4個並顯示4個不同的視頻。
實現此目的的最佳方法是什麼?
謝謝!
基於你在說什麼comments,這聽起來像你想按鈕創建的視頻動態的數字,並讓他們在一個網格漂亮的一面展示
我將通過創建您的DataContext的ObservableCollection<VideoPlayer>
啓動保存您想要的視頻數量,第二個屬性包含平方根VideoPlayerCollection.Count
,向上取整,用於確定網格大小。
然後我會使用有它的一套ItemsPanelTemplate
到UniformGrid
或Grid
,結合行數和列數到您的GridSize
財產ItemsControl
顯示VideoPlayerCollection
。
(您可能需要建立一些AttachedProperties
綁定這些屬性,電網公司不具有行/列數屬性,我不記得,如果UniformGrid的Rows
和Columns
性能DependencyProperties
與否可以綁定對我有一些AttachedProperties的例子用於綁定Grid's
行數和列數here如果你有興趣的例子)
最後,你將按鈕修改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
將包含這些屬性:如果您使用的是Grid
或不
ICommand ModifyVideoCountCommand { get; set; }
ObservableCollection<VideoPlayer> VideoPlayerCollection { get; set; }
int GridSize
{
get
{
return Math.Ceiling(Math.Sqrt(VideoPlayerCollection.Count));
}
}
取決於你可能還需要將RowIndex
和ColumnIndex
屬性添加到您的VideoPlayer
類中,以指定哪個Grid.Row
和Grid.Column
每個VideoPlaye r應該被放置進去。
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column"
Value="{Binding ColumnIndex}" />
<Setter Property="Grid.Row"
Value="{Binding RowIndex}" />
</Style>
</ItemsControl.ItemContainerStyle>
當然,你想使用'Canvas'來處理類似網格的佈局......? –
我正在閱讀有關此權利,也許ListView與WrapPanel。 – ilansch
或者,也許你可以使用類似'Grid'的東西來處理* grid *類型的佈局? ;-) –