【发布时间】:2016-11-25 19:42:47
【问题描述】:
我有一个列表视图,用作日历显示,每一列代表一天。 如何在代码中将列标题设置为粗体?是否可以直接完成,而无需定义样式、静态资源、触发器等?
我试过了:
If TheDate.DayOfWeek = DayOfWeek.Saturday Or TheDate.DayOfWeek = DayOfWeek.Sunday Then Day01Column.SetValue(GridViewColumnHeader.FontWeightProperty, FontWeights.Bold) Else Day01Column.SetValue(GridViewColumnHeader.FontWeightProperty, FontWeights.Normal)
If TheDate.AddDays(1).DayOfWeek = DayOfWeek.Saturday Or TheDate.AddDays(1).DayOfWeek = DayOfWeek.Sunday Then Day02Column.SetValue(GridViewColumnHeader.FontWeightProperty, FontWeights.Bold) Else Day02Column.SetValue(GridViewColumnHeader.FontWeightProperty, FontWeights.Normal)
If TheDate.AddDays(2).DayOfWeek = DayOfWeek.Saturday Or TheDate.AddDays(2).DayOfWeek = DayOfWeek.Sunday Then Day03Column.SetValue(GridViewColumnHeader.FontWeightProperty, FontWeights.Bold) Else Day03Column.SetValue(GridViewColumnHeader.FontWeightProperty, FontWeights.Normal)
(依此类推,整个月) 然后我尝试了:
Dim BoldStyle As New Style
BoldStyle.Setters.Add(New Setter(Control.FontWeightProperty, FontWeights.Bold))
Dim NormalStyle As New Style
NormalStyle.Setters.Add(New Setter(Control.FontWeightProperty, FontWeights.Normal))
If TheDate.DayOfWeek = DayOfWeek.Saturday Or TheDate.DayOfWeek = DayOfWeek.Sunday Then Day01Column.SetValue(GridView.ColumnHeaderContainerStyleProperty, BoldStyle) Else Day01Column.SetValue(GridView.ColumnHeaderContainerStyleProperty, NormalStyle)
If TheDate.AddDays(1).DayOfWeek = DayOfWeek.Saturday Or TheDate.AddDays(1).DayOfWeek = DayOfWeek.Sunday Then Day02Column.SetValue(GridView.ColumnHeaderContainerStyleProperty, BoldStyle) Else Day02Column.SetValue(GridView.ColumnHeaderContainerStyleProperty, NormalStyle)
If TheDate.AddDays(2).DayOfWeek = DayOfWeek.Saturday Or TheDate.AddDays(2).DayOfWeek = DayOfWeek.Sunday Then Day03Column.SetValue(GridView.ColumnHeaderContainerStyleProperty, BoldStyle) Else Day03Column.SetValue(GridView.ColumnHeaderContainerStyleProperty, NormalStyle)
两者都不起作用 - 列标题似乎坚决不加粗。 任何想法我做错了什么?
我受够了 WPF。一切都复杂了一个数量级。以前使用 WinForms,我可以立即为自己敲出一些小应用程序。现在我花了数周时间与 XAML、数据绑定、命令等搏斗。当事情不工作时,没有错误消息,Intellisense 对 XAML 的帮助很小,我从中获得的唯一好处是与分辨率无关应用程序。
编辑:- 我应该补充一点,我知道这是可行的:
<Window.Resources>
<Style x:Key="ColumnHeaderBoldStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="FontWeight" Value="Bold"/>
</Style>
<Style x:Key="ColumnHeaderNormalStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="FontWeight" Value="Normal"/>
</Style>
If TheDate.DayOfWeek = DayOfWeek.Saturday Or TheDate.DayOfWeek = DayOfWeek.Sunday Then Day01Column.SetValue(GridViewColumn.HeaderContainerStyleProperty, Application.Current.MainWindow.FindResource("ColumnHeaderBoldStyle"))
但我相信我只能将一种样式应用于一个元素,并且由于我还希望能够将灰色背景应用于某些列标题,我认为这意味着只有灰色、仅粗体、灰色 + 粗体的样式,两者都不.然后,如果我想设置字体颜色,则需要 8 种样式。它不能很好地扩展。 肯定有办法从代码中访问 listview 元素并调整 chrome 的各个位吗?
非常感谢
尼克
【问题讨论】:
-
“我受够了 WPF” 这有点取决于你想要构建什么。了解设计和样式最好在 XAML 中完成,而不是在后面的代码中。这就是 WPF 的全部意义,分离关注点。为设计团队设计,为代码团队编写代码 :-)
-
您需要样式触发器。顺便说一句,WPF 很棒。
-
嗨,斯拉格斯特。我知道风格触发器。但是,正如我在更新中所说,我不需要为每种效果组合使用单独的样式吗?我不能在代码中以某种方式更改个人设置吗?
-
与其专注于设置整体样式,不如使用触发器来设置各个属性的值。一旦你做到了,你就可以确定将什么融入到风格中。