我想在我的代码中访问元素UserCodeTextBlock
,但由于某种原因我无法访问。
我的想法是展示TextBlock
和Button
,点击Button
后,它们都会变为不可见,只会显示TextBox
,因此我可以更改它&# 39; s值。
这一切都包含在DataGridTemplateColumn
中,如下面的代码所示:
XAML
<DataGridTemplateColumn x:Name="user_codeColumn" Header="{x:Static p:Resources.User_user_code}" Width="SizeToHeader">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:Name="UserCodeTemplate">
<StackPanel x:Name ="UserCodeStack" Orientation="Horizontal" HorizontalAlignment="Right">
<TextBlock x:Name="UserCodeTextBlock" Text="{Binding UserCode, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay }" Visibility="Visible"/>
<TextBox x:Name="UserCodeTextBox" Text="{Binding UserCode, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay }" Visibility="Collapsed"/>
<Button Content="A" Click="UserCodeButton_Click"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
在我的代码中,我有一个Event
,在点击Button
时执行。我试图使用我在某处找到的函数来读取XAML元素,但它似乎不起作用。
C#
public static T GetChildOfType<T>(this DependencyObject depObj)
where T : DependencyObject
{
if (depObj == null) return null;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
var result = (child as T) ?? GetChildOfType<T>(child);
if (result != null) return result;
}
return null;
}
private void UserCodeButton_Click(object sender, RoutedEventArgs e)
{
InitializeComponent();
var UserCodeTextBlock_ = this.user_codeColumn.GetChildOfType<DataTemplate>();
Button UserCodeButton_ = e.Source as Button;
UserCodeButton_.Visibility = Visibility.Hidden;
MessageBox.Show(Properties.Resources.CodeChanged, "", MessageBoxButton.OK);
}
我已经尝试了很多东西,但是我无法按照自己的意愿使它工作。顺便说一下,我是C#和WPF中的新手。在此先感谢您的帮助!