2009-05-04 2 views
2

У меня есть приложение WPF (.NET 3.0, VS2008), которое отображает данные в элементе управления вкладкой. Пользовательские цвета требуются практически для всех элементов управления в этом приложении: в основном белый передний план и зеленый фон.Как отключить темы XP в приложении WPF?

Моя проблема в том, что когда тема XP (например, Luna) активна, она автоматически применяется для визуализации элементов управления, так что мой белый текст написан на белом фоне. Например, на заголовок активного элемента вкладки: Unreadable tab item header

Я попытался:

  • удалить вложенный файл манифеста из сгенерированного приложения (в свойствах проекта): бесполезный.
  • , чтобы заставить использовать тему Windows Classic в ресурсах приложения:

    <ResourceDictionary.MergedDictionaries> 
        <ResourceDictionary Source="/PresentationFramework.Classic;V3.0.0.0;31bf3856ad364e35;component/themes/classic.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
    

Это последняя попытка работала отлично подходит для всех элементов управления, кроме вкладок, которые до сих пор показывает, как указано выше.

Любая идея?

Update: Я подозревал это поведение связано с пользовательского стиля, я должен обратиться к вкладке управления:

<Window.Resources> 
    <Style x:Key="Custom"> 
    <Setter Property="Control.Background" Value="#FF47C7C8" /> 
    <Setter Property="Control.Foreground" Value="White" /> 
    </Style> 
    <Style TargetType="TabControl" BasedOn="{StaticResource Custom}" /> 
</Window.Resources> 

Так как я могу получить классическую тему с настраиваемыми цветами?

ответ

2

Лучше всего, чтобы обеспечить согласованное поведение и внешний вид различных операционных систем, будет повторно-шаблон управления TabItem, а затем использовать триггер, чтобы изменить часть вашего нового шаблона, когда Выбран TabItem. Попробуйте что-то вроде следующего:

<Grid> 
<Grid.Resources> 
    <Style x:Key="Custom"> 
    <Setter Property="Control.Background" Value="#FF47C7C8"/> 
    <Setter Property="Control.BorderBrush" Value="#FF47C7C8"/> 
    <Setter Property="Control.Foreground" Value="White"/> 
    </Style> 
    <Style BasedOn="{StaticResource Custom}" TargetType="TabControl"/> 
    <Style TargetType="TabItem"> 
    <Setter Property="Foreground" Value="White"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type TabItem}"> 
      <Grid> 
      <Border 
       Name="Border" 
       Background="#FF47C7C8" 
       BorderBrush="#FFFFFF" 
       BorderThickness="1,1,1,1" 
       CornerRadius="2,2,0,0"> 
       <ContentPresenter 
       x:Name="ContentSite" 
       HorizontalAlignment="Center" 
       Margin="12,2,12,2" 
       VerticalAlignment="Center" 
       ContentSource="Header" 
       RecognizesAccessKey="True"/> 
      </Border> 
      </Grid> 
      <ControlTemplate.Triggers> 
      <Trigger Property="IsSelected" Value="True"> 
       <Setter Property="Panel.ZIndex" Value="100"/> 
       <Setter TargetName="Border" Property="Background" Value="#FF47C7C8"/> 
       <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,0"/> 
      </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Style> 
</Grid.Resources> 
<TabControl> 
    <TabItem Header="Item 1"/> 
    <TabItem Header="Item 2"/> 
    <TabItem Header="Item 3"/> 
    <TabItem Header="Item 4"/> 
</TabControl> 

Бон шанс!

+0

Вы, должно быть, получили его от http://msdn.microsoft.com/en-us/library/ms752032.aspx. Merci en tous cas! – Mac

+0

На самом деле, я просто подстриг один из фрагментов «Simple Styles» (http://blog.nerdplusart.com/simplestyles) в Kaxaml. Это отличная отправная точка, когда вам нужно настроить внешний вид элементов управления WPF. :) – Peter

Смежные вопросы