使用Material Design的WPF TabControl(无需Dragablz)

3

所以,我安装了 "Material Design In XAML" 这个包,并且它顺利地将我所有的控件变得更加时尚。但是选项卡控件只有旧设计。我查找过,但唯一找到的是可以拖动和撕开的 "Dragablz Tab Control"。我不希望我的用户拖动或撕开选项卡。

因此,我正在寻找一种方法来使我的选项卡控件像其他控件一样换肤。或者让 Dragablz tabcontrol 不能被拖动和撕裂。我该怎么办?

2个回答

6
这是一个不可拖动和不可撕裂的Dragablz选项卡控件示例:
<dragablz:TabablzControl FixedHeaderCount="3">
   <TabItem Header="HELLO">
      <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">Hello World</TextBlock>
   </TabItem>
   <TabItem Header="MATERIAL">
      <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">Material Design</TextBlock>
   </TabItem>
   <TabItem Header="DESIGN">
      <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">Looks Quite Nice</TextBlock>
   </TabItem>                             
</dragablz:TabablzControl>

你可以将 FixedHeaderCount 属性值设置为你的 tabscontrol 上标签数目的数量,以使这些标签固定在页面上。(正如你从源代码中所看到的一样。)
/// <summary>
/// Allows a the first adjacent tabs to be fixed (no dragging, and default close button will not show).
/// </summary>
public int FixedHeaderCount
{
   get { return (int) GetValue(FixedHeaderCountProperty); }
   set { SetValue(FixedHeaderCountProperty, value); }
}

1
尽管有解决方案,请注意使用Dragablz会引入一些特定条件。我想到的一个条件是无法禁用或隐藏其选项卡(Tab Items)。 - Ondrej Janacek
1
不太兼容 .NetCore。 - admiri

6

请看一下MaterialDesignExtensions。它们提供了TabControl样式等功能。

  1. 首先安装Nuget包,并像这个示例中所示,在App.xaml中添加样式。
<ResourceDictionary.MergedDictionaries>
    <!-- Other MaterialDesign resource stuff -->
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignExtensions;component/Themes/Generic.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignExtensions;component/Themes/MaterialDesignLightTheme.xaml" />
</ResourceDictionary.MergedDictionaries>

然后,只需为您的标签控件设置样式:
<TabControl Style="{StaticResource MaterialDesignTabControl}">
    <TabItem Header="Tab 1">
        <!-- Your tab content -->
    </TabItem>
    <TabItem Header="Tab 2">
        <!-- Your tab content --> 
    </TabItem>
</TabControl>

看起来相当不错:

在此输入图片描述


这看起来很不错!有没有想法如何使用它切换浅色和深色主题?使用MDIX的PaletteHelper标准开关不会影响这些扩展。 - Colin Zabransky
简短回答 @colin-zabranskyprivate static void SetMaterialExtensionTheme(bool isDark) { var paletteHelper = new MaterialDesignExtensions.Themes.PaletteHelper(); paletteHelper.SetLightDark(isDark); } - Alexei Agüero Alba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接