我需要创建一个具有单个永久选项卡(“home”)的控件,并且所有其他选项卡都是可滚动的。
现在我试图通过继承TabControl来实现这个结果,为被覆盖的模板添加一个额外的按钮(看起来像一个标签),并在按钮时将SelectedIndex
设置为-1
点击。当SelectedIndex
为-1
时,触发器会导致TabControl的ContentControl绑定到特殊的“主页”选项卡的内容。基本上,我伪造一个真正的选项卡的行为,并取代在这样做时取消选择所有选项卡的能力。
除了两个问题外,这似乎有效:
此时我曾试图听过与TabControl相关的各种事件,但是它们似乎都没有给我一些可以解决这些行为的东西。
那里有什么东西可以让我覆盖默认的SelectedIndex
行为吗?我应该这样做吗?理想情况下,我想要一些方法来接收一组选项卡,这些选项卡允许我在视觉上分割选项卡而不会丢失TabControl的基本功能。
答案 0 :(得分:1)
我能想到实现这一目标的唯一方法是使用自定义ControlTemplate进行选项卡控件。您可以使用StyleSnooper获取当前模板。该模板的一部分需要替换为您编写的自定义面板。你基于Panel。您只需要覆盖ArrangeOverride,以便将Home选项卡排列在其位置,而其他选项则根据滚动位置进行排列。
答案 1 :(得分:0)
我能够通过编写自己的自定义选项卡面板来实现这一点,正如AresAvatar建议的那样。但是,该小组需要从http://www.codeproject.com/KB/WPF/ConceptualChildren.aspx的ConceptualPanel实施扩展。问题是面板需要在TabControl模板中有IsItemsHost="true"
以保留选项卡的选择行为。不幸的是,一旦普通面板是一个物品主机,它的子节点就不能从它自己的类代码中更改。所以,我无法添加我需要的滚动按钮。通过AddVisualChild添加所有内容(标签+滚动按钮),我能够通过ConceptualPanel解决这个问题。
可能有更好的方法可以做到这一点,但这对我有用。