Так что этот конкретный ответ, кажется, частично работает:
Сбросить унаследованный стиль WPF?
Однако, похоже, он не переопределяет стилизацию "внутренних" элементов. Например, если я установил для TextBlock Foreground красный в моем главном файле App.xaml, он изменит все элементы TextBlock, но также повлияет на элементы управления, которые имеют внутренние / шаблонные элементы управления, такие как текст элемента Button.
Когда я позже пытаюсь переопределить стиль, он влияет только на прямые элементы TextBlock. Кажется, что кнопки все еще используют стиль красного текста из App.xaml.
В приложении. Xaml:
<Application.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="Red" />
</Style>
</Application.Resources>
Содержимое MainWindow.xaml (оба элемента управления отображают красный текст):
<StackPanel>
<TextBlock>Hello World! I should be red!</TextBlock>
<Button Click="Button_Click" Content="I'm red, too. Click me to open a new Popup!" />
</StackPanel>
Событие Button_Click:
private void Button_Click(object sender, RoutedEventArgs e)
{
var x = new Popup();
x.Show();
}
и Popup.xaml:
<Window.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="Blue" />
</Style>
</Window.Resources>
<StackPanel>
<TextBlock>Hello World, I'm blue!</TextBlock>
<Button Content="Oh no! I should be blue, too, but I'm red!" />
</StackPanel>
Результат:
![Screenshot showing the Popup window button having red text](https://i.stack.imgur.com/9Ijyy.png)
Как сделать так, чтобы стиль в Popup.xaml имел такой же уровень воздействия, как и тот же стиль в App.xaml?
РЕДАКТИРОВАТЬ: я должен отметить, что реальная мотивация здесь в том, что я создаю плагины для корпоративного приложения. Базовое приложение имеет много стилей, которые переносятся в мои плагины, и я пытаюсь найти словарь ресурсов «сбросить все стили», но когда у меня есть такие вещи, как DataGrids, элементы содержимого не сбрасываются - они наследуют стили от базового приложения, и я пытаюсь найти эффективный способ их сброса, не будучи слишком явным.