2013-01-03 33 views
2

我想製作可以顯示1或2個視頻的應用程序。如何在WPF中以動態數字格式顯示動態數量的對象?

在窗口的左側部分,將會有2個按鈕標記爲「1」或「2」,作爲要在應用程序右側顯示的圖塊的數量。

通過點擊「1」,視頻將在整個右側播放。
通過點擊「2」,將會在右側顯示2個視頻中的2個視頻。

現在,它是唯一一個顯示1個視頻的完整窗口圖塊,另一個圖塊將完整窗口分成2個並顯示2個視頻,但是如果我需要4個視頻,我想將主窗口分割爲4個並顯示4個不同的視頻。

實現此目的的最佳方法是什麼?

謝謝!

+0

當然,你想使用'Canvas'來處理類似網格的佈局......? –

+0

我正在閱讀有關此權利,也許ListView與WrapPanel。 – ilansch

+2

或者,也許你可以使用類似'Grid'的東西來處理* grid *類型的佈局? ;-) –

回答

5

基於你在說什麼comments,這聽起來像你想按鈕創建的視頻動態的數字,並讓他們在一個網格漂亮的一面展示

我將通過創建您的DataContextObservableCollection<VideoPlayer>啓動保存您想要的視頻數量,第二個屬性包含平方根VideoPlayerCollection.Count,向上取整,用於確定網格大小。

然後我會使用有它的一套ItemsPanelTemplateUniformGridGrid,結合行數和列數到您的GridSize財產ItemsControl顯示VideoPlayerCollection

(您可能需要建立一些AttachedProperties綁定這些屬性,電網公司不具有行/列數屬性,我不記得,如果UniformGrid的RowsColumns性能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)); 
    } 
} 

取決於你可能還需要將RowIndexColumnIndex屬性添加到您的VideoPlayer類中,以指定哪個Grid.RowGrid.Column每個VideoPlaye r應該被放置進去。

<ItemsControl.ItemContainerStyle> 
    <Style> 
     <Setter Property="Grid.Column" 
       Value="{Binding ColumnIndex}" /> 
     <Setter Property="Grid.Row" 
       Value="{Binding RowIndex}" /> 
    </Style> 
</ItemsControl.ItemContainerStyle> 
相關問題