Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何动态设置行';将文本转换为粗体,使用MVVM、C#和无代码隐藏?_C#_Wpf_Mvvm_Datagrid - Fatal编程技术网

如何动态设置行';将文本转换为粗体,使用MVVM、C#和无代码隐藏?

如何动态设置行';将文本转换为粗体,使用MVVM、C#和无代码隐藏?,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我正在使用.NET、MVVM开发一个WPF页面,没有代码隐藏,使用PropertyChanged。在这个页面中,我有一个包含很多列的DataGrid。 在DB中,其中一列(我们称之为HIGHLIGHT)的值为s或N。如果value=s,整行将为粗体或超粗体。案例N=正常 我在XAML中使用以下代码完成了这项工作: <Style x:Key="TextRowStyle" TargetType="{x:Type TextBlock}" > <Styl

我正在使用.NET、MVVM开发一个WPF页面,没有代码隐藏,使用PropertyChanged。在这个页面中,我有一个包含很多列的DataGrid。 在DB中,其中一列(我们称之为HIGHLIGHT)的值为s或N。如果value=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>
我曾尝试在这些字段中创建一个转换器,使用:

<Page.Resources>
    <vm:HighlightConverter x:Key="HighlightConverter"/>
</Page.Resources>

然后进入网格:

<TextBlock FontWeight={Binding Slab.Highlight, Converter={StaticResource HighlightConverter}}"/>

通过删除
x:Key来隐式应用样式怎么样?这将使它在放置在
数据网格中时适用于网格中的任何地方。抱歉,这是未经测试的,因为我离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>

为什么不在DataGrid.Resources中创建“本地”样式。整行必须是粗体(S)或普通(N),这是对的吗



使用上面的代码,所有单元格都是正常的,但如果数据行具有Slab.Highlight=S,则所有单元格都将是粗体。代码没有经过测试。也许您必须添加TextBlock.fontwweight或类似的内容。

我已经尝试过了,但是TargetType=“DataGridTextColumn”不可用。如果我把“TextBlock”放进去,它不会影响任何东西。如果我将“DataGrid”放入Style.Resources将TargetType=“TextBlock”中,则只有网格线会更改。
但是TargetType=“DataGridTextColumn”不可用
怎么回事?我也觉得很奇怪,不知道为什么不可用。然而,当我将此代码放入Page.Resources而不是Datagrid.Resources.Ah时,它是可用的,我错了-DataGridTextColumn不是从FrameworkElement派生的。根据答案,GridCell是更好的选择。我也尝试过,但不起作用。这就是为什么我在页面上使用了这种样式。参考资料,这是另一个测试。@gustavosg:你是对的,你必须将列的
ElementStyle
设置为
{x:Null}
,隐式样式才能生效……我正在尝试将ElementStyle=“{x:Null}”设置为该数据网格。您知道如何设置为整个Datagrid,而不是在每一列中进行设置吗?当我这样做时,它会以蓝线显示错误:{x:typedatagridtextcolumn},并说:调用的目标抛出了异常。这是因为DataGridTextColumn不是从FrameworkElement(或FrameworkContentElement)派生的。仅FrameworkElement支持样式设置。但是我看不出有什么办法来解决这个问题。@gustavosg:你不能设置列的样式(我没有说别的),我只是说隐式
TextBlock
样式只有在所有列的
ElementStyle
都为空时才有效。您可以将隐式样式应用于
DataGridCell
,但是
FontWeight
也会影响
TextBox
等。我想,我的目的是根据规则设置网格行的样式,而不是将此样式列设置为column。在这种情况下,你知道我该怎么做吗?
<TextBlock FontWeight={Binding Slab.Highlight, Converter={StaticResource HighlightConverter}}"/>
            <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>
<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>