c# - WPF - 覆盖子/内部控件上的继承样式
问题描述
所以这个特定的答案似乎部分有效: 重置继承的 WPF 样式?
但是,它似乎并没有覆盖“内部”元素的样式。例如,如果我在主 App.xaml 文件中将 TextBlock Foreground 设置为红色,它将更改所有 TextBlock 元素,但它也会影响具有内部/模板化控件的控件,例如 Button 元素的文本。
当我稍后尝试覆盖样式时,它只会影响直接的 TextBlock 元素。按钮似乎仍然使用 App.xaml 中的红色文本样式。
在 App.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>
如何使 Popup.xaml 中的样式与 App.xaml 中的相同样式具有相同程度的影响?
编辑:我应该注意到,这里真正的潜在动机是我为企业应用程序构建插件。基本应用程序有很多样式可以继承到我的插件中,我正在尝试想出一个“重置所有样式”资源字典,但是当我有像 DataGrids 这样的东西时,内容元素不会被重置 -它们从基本应用程序继承样式,我正在尝试找到一种有效的方法来重置它们而不会过于明确。
解决方案
推荐阅读
- pandas - 如何使用我的日期时间进行预测(随机森林模型)
- amazon-cloudformation - Amplify 不知从何处获取了一个 appClientId,现在无法更新堆栈
- regex - 恰好匹配一个正则表达式项
- c - 在 C 中不使用 malloc 将局部变量保存在堆上(使用 sbrk 或 brk)
- styled-components - 样式化的组件和范围
- c++ - 二维向量的 MPI_Gather
- c++ - vcpkg 安装 wxWidgts 但出现包含错误
- c++ - (C++) 使用 curses 打印从文件中读取的新行
- python - 修复 csv 数据并在特定行的特定位置插入列的方法
- paypal - 为什么我得到错误'目前似乎没有工作。请稍后再试。' 在提交表单贝宝?