- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如我所看到的,很多人都遇到了这个确切的问题,但我不明白为什么我的案例不起作用,它开始让我发疯。
上下文:我有一个 DataGrid
这是根据每个单元格的值着色的。因此,我有一个动态样式来解析要用于每个单元格的实际模板。背景现在相应地工作。
新问题:当我有深色背景时,我希望字体颜色为白色,字体粗细为粗体,以便文本正确可读。而且......我无法正确设计它。
我阅读了一些关于此的 Stackoverflow 帖子:
This one fits my problem but doesn't provide me any working solution
This one is also clear and detail but... duh
This is almost the same problem as me but... Solution does not work
这是我到目前为止尝试过的:
<!-- Green template-->
<ControlTemplate x:Key="Green" TargetType="{x:Type tk:DataGridCell}">
<Grid Background="Green">
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center">
<ContentPresenter.Resources>
<Style BasedOn="{StaticResource BoldCellStyle}" TargetType="{x:Type TextBlock}" />
</ContentPresenter.Resources>
</ContentPresenter>
</Grid>
</ControlTemplate>
<Style x:Key="BoldCellStyle" TargetType="{x:Type TextBlock}">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="White" />
</Style>
<!-- Green template -->
<ControlTemplate x:Key="Green" TargetType="{x:Type tk:DataGridCell}">
<Grid Background="Green">
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center">
<ContentPresenter.Resources>
<Style x:Key="BoldCellStyle" TargetType="{x:Type TextBlock}">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="White" />
</Style>
</ContentPresenter.Resources>
</ContentPresenter>
</Grid>
</ControlTemplate>
ContentPresenter
的属性:
<!-- Green template -->
<ControlTemplate x:Key="Green" TargetType="{x:Type tk:DataGridCell}">
<Grid Background="Green">
<ContentPresenter TextElement.FontWeight="Bold" TextElement.Foreground="White" TextBlock.Foreground="White"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
Grid
与
ContentPresenter
包含
TextBlock
和实际
Style
但是...
TextBlock
的属性不适用和
FontWeight
还是正常的。
ContentPresenter
具有正确的属性(即
TextElement.FontWeight="Bold"
),但自动生成的
TextBlock
下面是 - 仍然 - 没有风格。
TextBlock
s 保持未格式化。
最佳答案
DataGridColumns
源自 DataGridBoundColumn
(除 DataGridTemplateColumn
外的所有)都有一个属性 ElementStyle
应用于 TextBlock
创建时。例如DataGridTextColumn
看起来像这样
static DataGridTextColumn()
{
ElementStyleProperty.OverrideMetadata(typeof(DataGridTextColumn),
new FrameworkPropertyMetadata(DefaultElementStyle));
// ...
}
ElementStyle
的元数据并提供了一个新的默认值,
DefaultElementStyle
,它基本上只是设置
TextBlock
的默认边距.
public static Style DefaultElementStyle
{
get
{
if (_defaultElementStyle == null)
{
Style style = new Style(typeof(TextBlock));
// Use the same margin used on the TextBox to provide space for the caret
style.Setters.Add(new Setter(TextBlock.MarginProperty, new Thickness(2.0, 0.0, 2.0, 0.0)));
style.Seal();
_defaultElementStyle = style;
}
return _defaultElementStyle;
}
}
DataGridCell
时都会在代码中设置此样式是用
element.Style = style;
创建的这会覆盖您尝试设置的样式,即使您尝试隐式设置它。
<DataGridTextColumn Header="Column 1" ElementStyle="{StaticResource BoldCellStyle}" .../>
<DataGridTextColumn Header="Column 2" ElementStyle="{StaticResource BoldCellStyle}" .../>
关于wpf - 在 ContentPresenter 中设置自动生成的 Textblock 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7092145/
可以通过 TextBlock 文本值设置 TextBlock 的前景属性吗? 例如:文本值是Mike,前景属性是Black,值是Tim,属性值是green等。我用google搜索,但没有找到任何解决方
我有一个显示大量信息的 ListView ,但是当它为空时,我想在其上覆盖一个文本 block ,上面写着“没有要显示的信息”或“bla-bla-bla 添加信息”。 ListView 设置为响应鼠标
我正在阅读 Scott Meyers 的 Effective C++ 3rd。 在第 3 项中: Use const whenever possible. In order to use const
我什么时候使用 的文本属性我什么时候应该把我的文字放在 的内容中? ? vs. Example Text 最佳答案 前者可以绑定(bind),而后者在组合 Run
作为背景,我有一个很长的 ID,它太长而无法在 TextBlock 的给定区域中显示。 ID 的有趣部分是结尾,也就是最右边的部分。 我想要做的是 TextBlock,而不是文本向右溢出并切断最右边的
我正在使用 MVVM 模式,并且我的 ModelView 中有字符串类型属性。 该字符串可能包含以下 HTML 标记: , , , 我需要将 TextBlock 中的某些文本部分设为正常、粗体或斜
我想在屏幕上显示一个数字。如果该数字为 0,我根本不希望它显示。 在常规触发器未能解决我的问题后,我尝试了上述代码
我有一个 TextBlock 和一个 Rectangle,它们都位于一个空的 WPF4 窗口中。 TextBlock 的 Foreground 和 Rectangle 的 Fill 都设置为值为 #8
我有一个 TextBlock其中可能包含很长的文本,所以我想为其添加一个垂直滚动条。我最初的尝试是包装一个 ScrollViewer周围。这行得通,但问题是当我放大时,宽度也被放大了。我尝试像这样禁用
TextBlock 控件中是否可以使用边距文本? 我对 textBlock 控件的风格在这里: --> -->
我的 DataGrid 中的专栏之一包含 Hyperlink在 TextBlock . When a row is selected, the hyperlink shows as blue on b
如果将 TextWrapping 设置为“Wrap”,则 WPF TextBlock 可以包含多行文本。 是否有一种“干净”的方式来获取文本行数?我考虑查看所需的高度并将其除以每条线的估计高度。然而,
有没有办法在控件下方的 TextBlock 中显示错误内容,类似于以下设置工具提示以包含错误文本的方式?
在下面的 XAML 中,我试图包装绑定(bind)到“PortfolioCodes”和“CommentaryText”的 TextBlock,但似乎“Wrapping”不适用于 TextBlock。我
我有一个StackPanel,但以下行: 不包装文字。
我有一个包含大约 15-20 个文本 block 的屏幕,每个文本 block 绑定(bind)到不同的属性,起初所有的文本 block 都是空的,文本更新来自其他客户端。 我想做的是在文本更改时为闪
我有一个名为“findListText”的文本 block 。在这里,我正在更新其中的文本: private void InstantSearch(object sender, KeyEventArg
我试图找出创建样式/触发器以将前景设置为红色的最佳方法,当值 关于WPF Te
我确实有一个 WPF 应用程序实时显示数据(从另一个线程计算)。但是我的 UI 组件(这里是 TextBlock)更新非常缓慢。 我使用传统的数据绑定(bind) PropertyChanged通知。
我想读取一个文件,然后根据某些条件,用不同的颜色标记一些行。 我发现了类似的问题和答案,但它不是使用 MVVM 模式编写的: Selective coloring on dynamic TextBlo
我是一名优秀的程序员,十分优秀!