2011-04-06 49 views
4

我想覆盖Silverlight中TabControl的默认模板。当它们满了时,我不想让标签环绕,我想让它能够滚动浏览它们,类似于ListBox。但是,Silverlight只是忽略了我放入“ItemsPanelTemplate”的所有内容并呈现默认值。这里是相关的代码:覆盖Silverlight 4中的默认ItemsPanelTemplate?

<swc:TabControl Grid.Row="0" Grid.Column="1" Name="Tabs"> 
     <swc:TabControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <ScrollViewer> 
        <StackPanel Orientation="Horizontal" /> 
       </ScrollViewer> 
      </ItemsPanelTemplate> 
     </swc:TabControl.ItemsPanel> 

即使我只是把一个常规的StackPanel,它仍然没有做任何事。我为选项卡使用了Silverlight工具包,所以我在网上找到的所有东西都只是用于常规的WPF,并不适用于Silverlight。非常感谢你的建议。

+0

如果你根本没有指定'ItemsPanel',它会工作吗? – Gabe 2011-04-06 19:15:47

+0

ScrollViewer不是Panel,它不起作用。您需要重新定义TabControl的ControlTemplate。这里是关于可滚动tabitems的帖子http://www.dansoltesz.com/post/2010/07/20/Silverlight-tabcontrol-with-scrollable-tabItems.aspx,但它工作可怕。等一下,我会发布正确的代码。 – vorrtex 2011-04-06 20:52:32

+0

所以,如果你真的有趣的工作TabControl与数据绑定和两个按钮(它提供左右滚动),这里是链接:C#代码:http://pastebin.com/Q0Dx3kAn控制的xaml:http:///pastebin.com/E7Nmx7Cs使用示例:http://pastebin.com/aL6t34R8。不要使用我之前评论中的控件,因为我的控件没有错误。一段时间后,我会重构代码并撰写博客文章。 – vorrtex 2011-04-06 21:26:03

回答

2

ItemsPanel需要在其中有一个面板作为根元素。你有一个ScrollViewer。如果你想添加一个ScrollViewer,你必须创建一个用ScrollViewer包装ItemsPresenter的自定义ControlTemplate。 ItemsPresenter将显示ItemsPanel的位置。

您应该能够从Silverlight Toolkit源中获取默认的Style和ControlTemplate,并根据需要调整它。然后将您的修改版本包含在您的应用程序资源中,或将其明确应用于单独的TabControls。

+0

谢谢,事实证明,你不仅需要一个面板作为根,你需要一个TabPanel。它现在有效。 – TheEnigmaMachine 2011-04-07 18:13:36

+0

这很有帮助。谢谢! – 2011-11-17 18:10:35