我尝试在向DataGrid添加项目时更改行样式。
<DataGrid x:Name="datagrid1" HorizontalAlignment="Stretch" Height="auto" Margin="10,64,0,0"
VerticalAlignment="Stretch" Width="auto" AutoGenerateColumns="False" DataContext="{Binding}" ItemsSource="{Binding}">
<DataGrid.ItemContainerStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding UIvisibility}" Value="-2">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
<DataTrigger Binding="{Binding UIvisibility}" Value="-1">
<Setter Property="Background" Value="Blue"/>
<Setter Property="Foreground" Value="White"/>
</DataTrigger>
<DataTrigger Binding="{Binding UIvisibility}" Value="-0">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.ItemContainerStyle>
</DataGrid>
kMS(i).line(7)具有&#34; -2&#34;,&#34; -1&#34;,&#34; -0&#34;或&#34; 1&#34;对于每个kMS(i)作为String,并将分配给Item.Visibility
For Instance
kMS(1).line(7)="-1"
kMS(4).line(7)="-0"
kMS(369).line(7)="1"
kMS(897).line(7)="-2"
代码正在关注
Dim c3 As DataGridTextColumn = New DataGridTextColumn
c3.Binding = New System.Windows.Data.Binding("UIvisibility")
c3.Visibility = 1
datagrid1.Columns.Add(c3)
Dim Additem(kMS.Length - 1) As Item
For i = 0 To kMS.Length - 1
Additem(i) = New Item
Additem(i).Callback = kMS(i).line(8)
Additem(i).Keyboard = "No Assign"
If kMS(i).line(3).Remove(0, 2) <> "FFFFFFFF" Then
Additem(i).Keyboard = kMS(i).line(3).Remove(0, 2)
End If
Additem(i).UIvisibility = kMS(i).line(7)
datagrid1.Items.Add(Additem(i))
Next
Public Class Item
Public Property Callback As String
Public Property Keyboard As String
Public Property UIvisibility As String
End Class
效果不佳,结果只有透明背景和黑色前景的行。
Actutal image of the application
我错过了什么?
答案 0 :(得分:0)
如果您发布问题的屏幕截图,会有所帮助。
我的猜测是你改变了错误的WPF控件的属性。要更改背景,DataGridRow仅适用于任何行未覆盖的行部分。当DataGrid比所有列宽时,可能会发生这种情况。
对于列,DataGridCell,即TextBox在DataGridRow上绘制。因此,如果DataGridRow是透明的,但TextBox是白色的,则会看到白色背景。
这种问题WPF经常避免使用图形继承,这意味着当在容器中设置属性时,所有不为该属性编写自己值的控件都将继承容器中的值。
不幸的是,DataGrid的行为完全不同。通常,如果您不依赖于图形继承,那么您的问题就会消失,但是要设置正确的控件。
2条建议
1)不要使用触发器来改变风格。您可以使用绑定轻松完成:
<datagrid.rowstyle>
<style targettype="DataGridRow">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self},
Path=Item.Quantity, Converter={StaticResource QuantityToBackgroundConverter}}"/>
</style>
</datagrid.rowstyle>
前景可以这样做:
<Setter Property="Foreground"
Value="{Binding
RelativeSource={RelativeSource Self},
Path=Text,
Converter={StaticResource QuantityToForegroundConverter}}" />
2)格式化DataGrid是一个令人头疼的问题。我花了几周试图理解它。阅读我的文章,其中提供了大量背景信息和许多示例,以及如何重要格式化:
www.codeproject.com: Guide to WPF DataGrid formatting using bindings