我正在使用.NET,MVVM开发一个WPF页面,没有代码隐藏,使用PropertyChanged。在这个页面中,我有一个包含很多列的DataGrid。 进入DB,其中一个列,我们称之为HIGHLIGHT,将具有值S或N.如果value = S,则整行将为Bold或ExtraBold。案例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}}"/>
有没有人知道如何才能使这项工作?
祝你好运, 古斯塔沃。
答案 0 :(得分:9)
为什么你不在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或类似的东西。
答案 1 :(得分:2)
通过删除x:Key
隐式应用样式怎么样?当它放在DataGrid.Resources
。
答案 2 :(得分:0)
这可能有用。对不起,它没有经过测试,因为我离IDE很近。
<DataGrid>
<DataGrid.Resources>
<Style TargetType="DataGridTextColumn">
<Style.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontWeight" Value="{Binding Slab.Highlight, Converter={StaticResource HighlightConverter}}"/>
</Style>
</Style.Resources>
</Style>
</DataGrid.Resources>
</DataGrid>