我正在使用 .NET、MVVM、无代码隐藏、使用 PropertyChanged 开发 WPF 页面。在此页面中,我有一个包含很多列的 DataGrid。 在数据库中,其中一个列(我们称它为 HIGHLIGHT)将具有值 S 或 N。如果值 = S,则整行将为粗体或超粗体。案例 N = 正常。
我在 XAML 中使用这段代码完成了这项工作:
<Style x:Key="TextRowStyle" TargetType="{x:Type TextBlock}" >
<Style.Triggers>
<DataTrigger Binding="{Binding Slab.Highlight}" Value="S">
<Setter Property="FontWeight" Value="ExtraBold"/>
</DataTrigger>
</Style.Triggers>
</Style>
但是这样做的话,我将不得不在每一列中放入这段代码以使其工作(注意 ElementStyle):
<DataGridTextColumn Header="Test" Binding="{Binding SlabSeq}" ElementStyle="{StaticResource TextRowStyle}"/>
我需要什么:
我的数据库的每个表都有几个列,超过 60、70,我正在寻找一种方法来使这更容易,比如我制作的 StaticResource TextRowStyle...
我做了另一件事,它是一个转换器:
public class HighlightConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (System.Convert.ToChar(value).Equals("S"))
return FontWeights.ExtraBold;
else
return FontWeights.Normal;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return FontWeights.ExtraBold;
}
}
我尝试在这些字段中制作一个转换器,使用:
<Page.Resources>
<vm:HighlightConverter x:Key="HighlightConverter"/>
</Page.Resources>
并进入网格:
<TextBlock FontWeight={Binding Slab.Highlight, Converter={StaticResource HighlightConverter}}"/>
有没有人知道我如何才能使这项工作成功?
最好的问候, 古斯塔沃。
最佳答案
为什么不在 DataGrid.Resources 中创建“本地”样式。整行必须是粗体 (S) 还是正常 (N),我说对了吗?
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}" >
<Setter Property="FontWeight" Value="Normal"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Slab.Highlight}" Value="S">
<Setter Property="FontWeight" Value="ExtraBold"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
使用上面的代码,所有单元格都是正常的,但如果数据行具有 Slab.Highlight=S,则所有单元格都将变为粗体。代码未经测试。也许你必须添加 TextBlock.Fontweight 或类似的东西。
关于c# - 如何使用 MVVM、C# 和无代码隐藏将 Row 的文本动态设置为粗体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791900/