如何通过代码访问 wpf datagrid 列标题模板中的元素?
有一个解决方案,但我无法让它工作。
http://social.msdn.microsoft.com/Forums/en/wpf/thread/3237cb62-3a6a-4663-9f1e-7894cb24c674
其实我不知道是什么
Control.name 属性
和
标题
在上面的答案中?
如何通过代码访问 wpf datagrid 列标题模板中的元素?
有一个解决方案,但我无法让它工作。
http://social.msdn.microsoft.com/Forums/en/wpf/thread/3237cb62-3a6a-4663-9f1e-7894cb24c674
其实我不知道是什么
Control.name 属性
和
标题
在上面的答案中?
对于仍然有这个问题的人。
你有这个模板:
<DataTemplate x:Key="DataGridColumnHeaderTemplate">
<StackPanel>
<DockPanel x:Name="DockPanelFilter"></DockPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}"></TextBlock>
<Image x:Name="ImageLock" Source="Resources/lock.png" Width="14" Height="14" Margin="2,0,0,0"></Image>
</StackPanel>
</StackPanel>
</DataTemplate>
并且您想要访问 ImageLock 图像。你可以使用:
Public Shared BooAfterItemsPresenter As Boolean = False
Public Shared ColumnName As String = String.Empty
Public Shared Function FindVisualChildByName(Of T As DependencyObject)(parent As DependencyObject, name As String, columnNameI As String) As T
Dim ColumnNameInput As String = columnNameI
For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(parent) - 1
Dim child = VisualTreeHelper.GetChild(parent, i)
Dim controlName As String = TryCast(child.GetValue(Control.NameProperty), String)
If TypeName(child) = "DataGridCellsPanel" Then
BooAfterItemsPresenter = True
End If
If BooAfterItemsPresenter = True AndAlso TypeName(child) = "DataGridColumnHeader" Then
Dim DGColHeader = CType(child, DataGridColumnHeader)
If DGColHeader.Content IsNot Nothing Then
ColumnName = DGColHeader.Content.ToString
Else
ColumnName = ""
End If
End If
If controlName = name AndAlso ColumnName = ColumnNameInput Then
Return TryCast(child, T)
Else
Dim result As T = FindVisualChildByName(Of T)(child, name, ColumnNameInput)
If result IsNot Nothing Then
Return result
End If
End If
Next
Return Nothing
End Function
然后当您使用此功能时:
Public Sub hideImageLock ()
Dim ImageLock = FindVisualChildByName(Of Image)(dataGrid, "ImageLock", "NEU2")
ImageLock.Visibility = Windows.Visibility.Collapsed
End Sub
我希望它可以帮助一些人!
Name 属性是您赋予该控件的名称。
在 xaml 中,您可以通过 x:Name 或简单地通过该控件的 Name 属性来指定它,如下所示。这意味着您正在创建一个名为 TextBox1 的 TextBox 类的对象。
<TextBox x:Name="TextBox1"/>
<TextBox Name="TextBox2"/>
在它后面的代码中是对象的名称
TextBox TextBox1 = new TextBox();
同样,Header 是 DataGridColumn 的属性。
我希望这将有所帮助。