Как отключить все пользовательские стили в WPF

#c# #wpf #xaml

#c# #wpf #xaml

Вопрос:

Я переопределяю стили по умолчанию для некоторых элементов управления в коде. После этого я хочу отключить все пользовательские стили для всех дочерних элементов (глубокая рекурсия) некоторого элемента управления. Например, xaml:

     <StackPanel>
        <StackPanel.Resources>
            <Style  TargetType="Button">
                <Setter Property="Background" Value="Red"/>
            </Style>
            <Style TargetType="TextBlock">
                <Setter Property="Background" Value="Red"/>
            </Style>
        </StackPanel.Resources>
        <Button>red style here is ok</Button>
        <TextBlock> also ok</TextBlock>
        <StackPanel>
            <StackPanel.Resources>
                <!-- magic command to disable ALL custom styles, for all controls like 
                <Style TargetType = "FrameworkElement"/>   -->
            </StackPanel.Resources>
            <Button> no style plz </Button>
            <TextBlock> bad style-_- </TextBlock>
        </StackPanel>
    </StackPanel>
 

Я знаю, что могу использовать style=null, но это плохое решение для меня, потому что мне нужно применять этот трюк для каждого типа элементов управления. Как я могу решить свою проблему?

Комментарии:

1. Вам нужен стиль для небольшой группы элементов управления и нет стиля для большей группы, верно? Если это так, вы можете использовать именованные ресурсы для своих стилей

2. Я хочу создать большую группу элементов управления, и нет стиля для большой группы элементов управления, так что именованные стили не являются решением.

Ответ №1:

Вы можете ввести пустой стиль, который будет иметь приоритет над вашим другим стилем. Нравится:

 <StackPanel>
    <StackPanel.Resources>
        <Style  TargetType="Button">
            <Setter Property="Background" Value="Red"/>
        </Style>
        <Style TargetType="TextBlock">
            <Setter Property="Background" Value="Red"/>
        </Style>
    </StackPanel.Resources>
    <Button>red style here is ok</Button>
    <TextBlock> also ok</TextBlock>
    <StackPanel>
        <StackPanel.Resources>
            <!-- magic command to disable ALL custom styles, for all controls -->
            <Style  TargetType="Button" />
            <Style TargetType="TextBlock" />
        </StackPanel.Resources>
        <Button> no style plz </Button>
        <TextBlock> bad style-_- </TextBlock>
    </StackPanel>
</StackPanel>
 

Комментарии:

1. Для этого решения мне нужно знать, какие стили переопределены, и сбрасывать каждый стиль, это тоже плохо.