如何通過代碼訪問WPF DataGrid列頭模板中的元素?如何訪問wpf datagrid列標題模板中的元素?
有一個解決方案,但我不能使它發揮作用。
http://social.msdn.microsoft.com/Forums/en/wpf/thread/3237cb62-3a6a-4663-9f1e-7894cb24c674
其實我也不知道什麼
Control.nameproperty
和
頁眉
在上面的答案?
如何通過代碼訪問WPF DataGrid列頭模板中的元素?如何訪問wpf datagrid列標題模板中的元素?
有一個解決方案,但我不能使它發揮作用。
http://social.msdn.microsoft.com/Forums/en/wpf/thread/3237cb62-3a6a-4663-9f1e-7894cb24c674
其實我也不知道什麼
Control.nameproperty
和
頁眉
在上面的答案?
Name屬性是你給該控件的名稱。
在XAML你用x指定它:姓名或簡單地象下面這樣控制的名稱屬性。這意味着你正在創建一個名爲TextBox1的TextBox類的對象。
<TextBox x:Name="TextBox1"/>
<TextBox Name="TextBox2"/>
在它後面的代碼是對象的名稱
TextBox TextBox1 = new TextBox();
同樣部首是的DataGridColumn的屬性。
我希望這將有助於。
對於誰是仍然有這個問題的人。
你有這樣的模板:
<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
我希望它可以幫助一些人!