2011-08-01 22 views
0

特殊的手風琴我已經把一個例子鏈接在這裏: http://activeden.net/item/xml-horizontal-vertical-accordion-banner-rotator/full_screen_preview/127714?ref=premiumtemplates有點像控制

我儘量做到相似(但更基本的)與WPF的東西。 不是飛行文字的東西,只是基本的導航想法。 我試圖用一些擴展器控件和一個堆棧面板來構建它。 我想出了是這樣的:

<ItemsControl Grid.Row="1" IsTabStop="False" ItemsSource="{Binding Path=tabs,Mode=OneWay}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <ContentPresenter Content="{Binding}" />      
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Orientation="Vertical" />    
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 

我用MVVM,所以也被應用模板:

<DataTemplate DataType="{x:Type vm:TabulatorViewModel}"> 
    <Expander HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ExpandDirection="{Binding .direction,Mode=OneWay}" IsExpanded="{Binding .isExpanded,Mode=TwoWay}" Header="{Binding .header,Mode=OneWay}" > 
     <Expander.Style> 
       <Style TargetType="{x:Type Control}"> 

       <Setter Property="Template" Value="{StaticResource HorizontalExpanderRight}" /> 

       <Style.Triggers> 

        <DataTrigger Binding="{Binding .direction}" Value="Left"> 

         <Setter Property="Template" Value="{StaticResource HorizontalExpanderLeft}" /> 

        </DataTrigger> 

       </Style.Triggers> 

      </Style> 
     </Expander.Style> 

     <StackPanel> 
      <Label Content="{Binding .seitenInhalt.Header,Mode=OneWay}"></Label> 

     <TextBox Text="{Binding .seitenInhalt.Inhalt,Mode=OneWay}"></TextBox> 
      <Button Content="zurück" Command="{Binding .seitenInhalt.MovePreviousCommand}" /> 
      <Button Content="vor" Command="{Binding .seitenInhalt.MoveNextCommand}"/>     

     </StackPanel> 
    </Expander> 

</DataTemplate> 

所以,這是工作至少一種。

從我目前的項目中的兩個截圖來解釋問題: 由於聲望點,無法發佈圖片。

所有項目應該使用堆疊面板的完整寬度,而不是像圖片中那樣。由於名譽點而無法發佈圖片。

所有項目應該使用完整的寬度,但是其中一個擴展項目應該有更大的寬度。如圖所示,但摺疊的物品應使用剩餘的空間,每個填充空隙的數量相同)

任何幫助都會很棒,我希望能夠理解我的目標/問題。

回答

0

我想你想使用的是一個UniformGridPanel或WrapPanel,它將使用可用的全部寬度,而不是使用可能的最小寬度的StackPanel。面板概述是here

+0

包裝面板只在最後一個項目擴展到全部在其餘的空間,也不擴大項目的全高(至少我認爲是這樣)。這不是我想要的效果。但thx爲您的答案! –

+0

你嘗試過UniformGridPanel嗎? –

0

你可能想使用Grid設置爲*的列/行的Height/Width如果該項目被擴大,或者Auto如果不是。

另外,如果你在一個ItemsControl使用一個網格,你需要在ContentPresenter,而不是ItemTemplate設置Grid.Row/Grid.ColumnWidth/Height性能,因爲在ItemsControl的ItemTemplate中始終包裹在一個ContentPresenter

+0

你好,雷切爾,聽起來很有希望,但我不完全理解它。你可以提供一些樣本xaml嗎?我想到的是:對不起,沒有設法粘貼它,我是新的堆棧溢出... –

+0

再次你好,雷切爾。我認爲你的想法很好。我設法讓它起作用,至少部分。現在,我的問題如下:如何使用viewmodel綁定將列寬從*更改爲auto?這是在columndefinition中設置的,那麼我該怎麼做?希望你也可以幫助我解決這個問題。而且,我還想說,如果我可以以任何方式幫助你,就問!我很高興你能幫助我解決這個問題! –