2013-05-15 35 views
2

在我的应用程序中,我最近试图在外观方面进行爵士乐,因此我尝试使用MahApps.Metro。但是我遇到了一点障碍。无法样式TabControl

在我的申请中,我有一个tabcontrol,我已经使用了style作为以下;

<Page.Resources> 
    <ResourceDictionary> 

     <ResourceDictionary.MergedDictionaries> 
     <!--Resource dictionary for mahapps. --> 
     </ResourceDictionary.MergedDictionaries> 

     <Style TargetType="{x:Type TabItem}"> 
     <Setter Property="HeaderTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <!-- FormName is the name of the ViewModel--> 
         <TextBlock Text="{Binding FormName}" VerticalAlignment="Center" Margin="2" /> 
        </StackPanel> 
        <DataTemplate.Triggers> 
         <DataTrigger Binding="{Binding IsValid}" 
           Value="False"> 
         </DataTrigger> 
        </DataTemplate.Triggers> 
       </DataTemplate> 
      </Setter.Value>      
     </Setter>     
    </Style> 
</ResourceDictionary> 
</Page.Resources> 

<!-- The itemsource that is bound to is a ObservableCollection of Forms that are used to validate for a Progress bar, It uses the ViewModels--> 
<TabControl x:Name="tabcontrol" 
      Grid.Row="1" 
      ItemsSource="{Binding Forms}" 
      SelectedIndex="0" BorderBrush="Black" /> 

显然,这是不使用MahApps.Metrotabcontrol。不过,在tabcontrolstyle内,我将TargetType更改为以下内容,但它会导致Page中的所有内容都增加其大小,并将两个制表符内容合并为一个;

<Style TargetType="{x:Type Controls:MetroTabItem}" BasedOn="{StaticResource MetroTabItem}"> 

enter image description here

任何帮助将是关于帮助我实现MahApps.Metotab control和清理什么,我做错了感激。干杯。

回答

3

所有混淆结果的原因是因为MetroTabItem没有它自己的Template我认为它使用TabItem样式替代。你原来的方法是在正确的道路上。

我不知道你的实际样式是如何配置的(你粘贴的ResourceDictionary的剪切粘贴不会按原样编译),但如果你使用这块资源(并添加你的),它应该工作。在这里测试和工作。

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" /> 
     <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> 
     <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> 
     <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedSingleRowTabControl.xaml" /> 
     <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" /> 
     <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" /> 
     <ResourceDictionary> 
      <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}"> 
       <Setter Property="HeaderTemplate"> 
        <Setter.Value> 
         <DataTemplate > 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding FormName}" VerticalAlignment="Center" Margin="2" /> 
          </StackPanel> 
          <DataTemplate.Triggers> 
           <DataTrigger Binding="{Binding IsValid}" Value="False" /> 
          </DataTemplate.Triggers> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </ResourceDictionary> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

注意:VS会抱怨“在属性表达式中检测到一个循环”。这是真的,但工作正常。您可以忽略该错误。该解决方案将建立并运行良好。

+0

感谢@Maverik!到底需要什么! :) –

0

建立在Maverik上面所说的内容(没有声望只是添加注释...)尝试使用BasedOn =“{StaticResources MetroTabItem}”来防止循环投诉。

<ResourceDictionary> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" /> 
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" /> 
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" /> 
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedSingleRowTabControl.xaml" /> 
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" /> 
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" /> 
    <ResourceDictionary> 
     <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource MetroTabItem}"> 
      <Setter Property="HeaderTemplate"> 
       <Setter.Value> 
        <DataTemplate > 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock Text="{Binding FormName}" VerticalAlignment="Center" Margin="2" /> 
         </StackPanel> 
         <DataTemplate.Triggers> 
          <DataTrigger Binding="{Binding IsValid}" Value="False" /> 
         </DataTemplate.Triggers> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ResourceDictionary> 
</ResourceDictionary.MergedDictionaries>