在WPF中查找控件有时有效,有时无效';T为什么?
我有一个datagrid,每个列标题中都有一个按钮。以下是XAML:在WPF中查找控件有时有效,有时无效';T为什么?,wpf,vb.net,binding,datagrid,visualtreehelper,Wpf,Vb.net,Binding,Datagrid,Visualtreehelper,我有一个datagrid,每个列标题中都有一个按钮。以下是XAML: <Style TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="ContentTemplate"> <Setter.Value>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button x:Name="ExcelFilterButton"
Margin="0,0,0,0"
BorderThickness="0"
Click="ExcelFilterButton_Click"
Focusable="False"
Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
Tag="{Binding}">
<Image Width="19"
Height="19"
Source="Resources\NoSortNoFilter.png"
Tag="{Binding}" />
</Button>
<TextBlock x:Name="ColumnName"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="{Binding}" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
以及隐藏/显示按钮的方法:
Public Sub SetStaticColumn(ColumnName As String, IsStatic As Boolean)
Dim btn As Button = Nothing
GetSortButton(Of Button)(dataGrid, ColumnName, btn)
Debug.WriteLine("btn is nothing: " & (btn Is Nothing).ToString)
If btn IsNot Nothing Then
btn.Visibility = If(IsStatic, Visibility.Collapsed, Visibility.Visible)
End If
End Sub
现在,当第一次加载网格时,我调用SetStaticColumn(“Ex”,True),按钮没有出现在Ex列中(它工作了)。调试过程如下所示:
GetSortButton btn.Name: ExcelFilterButton; btn.Tag: Ex
GetSortButton Tag 'Ex' found.
但是当重新加载网格以显示更新的数据时,Ex列中的按钮再次可见(它不起作用)。调试结果显示:
GetSortButton btn.Name: ; btn.Tag:
btn is nothing: True
看起来按钮此时没有标记值,所以找不到。什么时候装订?我尝试在设置DataGrid.ItemsSource后调用该方法,该方法也在DataGrid.Loaded事件处理程序中,也在DataGrid.AutoGeneratingColumn事件处理程序中。我能让按钮在重新加载后消失的唯一方法是创建一个调用该方法的按钮,然后在网格重新加载后单击该按钮。在这一点上我感到困惑
如有任何建议,我们将不胜感激
GetSortButton btn.Name: ; btn.Tag:
btn is nothing: True