2010-07-12 53 views
1

我需要显示Buttons,用户可以使用它来添加控件。 Buttons按组分类。这是我遇到的XAML -Wrappanel和scrollviewer问题

<ScrollViewer 
    VerticalScrollBarVisibility="Auto"> 
    <GroupBox 
     Name="maingroup" 
     Header="Click To Add Controls" 
     BorderBrush="Transparent"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition 
        Height="*" /> 
       <RowDefinition 
        Height="90" /> 
      </Grid.RowDefinitions> 

      <GroupBox 
       Grid.Row="0" 
       Name="groupVarControls" 
       Header="{Binding Path=GroupBoxHeaderText, Mode=OneWay}"> 
       <ScrollViewer 
        HorizontalScrollBarVisibility="Auto" 
        VerticalScrollBarVisibility="Hidden"> 
        <WrapPanel 
         Margin="7,7,0,0" 
         AllowDrop="False"> 
         <syncfusion:RibbonButton 
          SizeForm="Large" 
          Name="BarControl" 
          LargeIcon="Images\Bar.png" 
          Label="Bar" 
          AllowDrop="True"> 
         </syncfusion:RibbonButton> 

        <!-- 10 More buttons --> 

        </WrapPanel> 
       </ScrollViewer> 
      </GroupBox> 

      <GroupBox 
       Grid.Row="1" 
       Name="groupVarControls2" 
       Visibility="{Binding Path=GroupBoxVisibility, Mode=OneWay}" 
       Header="Click to Add control"> 
       <ScrollViewer 
        VerticalScrollBarVisibility="Hidden" 
        HorizontalScrollBarVisibility="Auto"> 
        <WrapPanel 
         Margin="7,7,0,0" 
         AllowDrop="False"> 
         <syncfusion:RibbonButton 
          SizeForm="Large" 
          Name="ClockControl" 
          AllowDrop="False" 
          LargeIcon="Images\Clock.png" 
          Label="Clock" 
          Click="ClockControl_Click" /> 

         <!-- More buttons --> 

        </WrapPanel> 
       </ScrollViewer> 
      </GroupBox> 
     </Grid> 
    </GroupBox> 
</ScrollViewer> 

我希望有一个垂直ScrollBar常见的两种WrapPanel的和个人的水平ScrollBar的。由于这个XAML滚动条未能正确显示,ScrollViewer会导致包装被“禁用”,它只会将我的控件保存在一个row(或column)中,并立即使用ScrollBar

我不能给一个固定的widhtWrapPanel的,因为这控制将在DockPanel(类似于VS工具箱)被显示,并且用户可以cnage它。

任何想法?

回答

2

此代码将在需要时显示一个垂直滚动条和两个水平滚动条。在您的代码中,您需要将包装面板的MinWidth设置为最宽的孩子的宽度。您可能可以轻松地在您的代码中处理用户添加或删除控件的操作。

<ScrollViewer 
    VerticalScrollBarVisibility="Auto"> 
    <StackPanel> 
     <GroupBox Header="Box 1"> 
      <ScrollViewer 
       VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto"> 
       <WrapPanel 
        MinWidth="200" 
        Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ScrollViewer}}, Path=ActualWidth}"> 
        <Button Width="200" Height="50" /> 
        <Button Width="150" Height="50" /> 
        <Button Width="160" Height="50" /> 
        <Button Width="170" Height="50" /> 
        <Button Width="180" Height="50" /> 
       </WrapPanel> 
      </ScrollViewer> 
     </GroupBox> 
     <GroupBox Header="Box 2"> 
      <ScrollViewer 
       VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto"> 
       <WrapPanel 
        MinWidth="200" 
        Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ScrollViewer}}, Path=ActualWidth}"> 
        <Button Width="200" Height="50" /> 
        <Button Width="150" Height="50" /> 
        <Button Width="160" Height="50" /> 
        <Button Width="170" Height="50" /> 
        <Button Width="180" Height="50" /> 
       </WrapPanel> 
      </ScrollViewer> 
     </GroupBox> 
    </StackPanel> 
</ScrollViewer>