2011-08-01 19 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中设置的,那么我该怎么做?希望你也可以帮助我解决这个问题。而且,我还想说,如果我可以以任何方式帮助你,就问!我很高兴你能帮助我解决这个问题! –