WPF - 如何在XAML中访问网格的子元素到我的代码?

时间:2018-01-10 15:10:57

标签: c# wpf xaml

我想在我的代码中访问元素UserCodeTextBlock,但由于某种原因我无法访问。

我的想法是展示TextBlockButton,点击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中的新手。在此先感谢您的帮助!

0 个答案:

没有答案