【问题标题】:How to set a listview column header to bold, in code如何在代码中将列表视图列标题设置为粗体
【发布时间】: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 很棒。
  • 嗨,斯拉格斯特。我知道风格触发器。但是,正如我在更新中所说,我不需要为每种效果组合使用单独的样式吗?我不能在代码中以某种方式更改个人设置吗?
  • 与其专注于设置整体样式,不如使用触发器来设置各个属性的值。一旦你做到了,你就可以确定将什么融入到风格中。

标签: wpf vb.net


【解决方案1】:

在 C# 中,我可以从 XAML 中做这件事作为准备:

<ListView.View>
   <GridView>
     <GridViewColumn DisplayMemberBinding="{Binding Name}" Width="160">
     <GridViewColumn.Header>
       <GridViewColumnHeader Tag="Name" Click="SortInterfaces_Click">Name</GridViewColumnHeader>
     </GridViewColumn.Header>
    </GridViewColumn>

然后在 C# 中我切换字体粗细:

private void SortInterfaces_Click(object sender, RoutedEventArgs e)
{
  GridViewColumnHeader column = (sender as GridViewColumnHeader);
  if (column.Tag == null) return;
  column.FontWeight = FontWeights.Bold;
  InterfaceSortChangeTo(column);
}

如果 WPF 让您感到痛苦,请尽量不要偏离默认的内置功能。对于里面的功能,其实还可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2012-03-19
    • 2020-09-24
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多