如何更改位于每个DataGrid行细节中的DataTemplate中的TextBlock的文本?

3

我有一个数据表格,通过鼠标在每行上单击可以显示该行的详细信息。以下是代码:

Microsoft.Windows.Controls.DataGridRow row = (Microsoft.Windows.Controls.DataGridRow)(DataGrid1.ItemContainerGenerator.ContainerFromItem(DataGrid1.SelectedItem));


        DataGridDetailsPresenter presenter = FindVisualChild<DataGridDetailsPresenter>(row);


        DataTemplate template = presenter.ContentTemplate;
        TextBlock txt = (TextBlock)template.FindName("rowdetails", presenter);
        txt.Text = retString;

此外,我有一个复选框,当您勾选它时,应显示所有行的详细信息。 我正在尝试使用以下代码显示所有行的详细信息:

if ((bool)chkboxRowDetails.IsChecked)
            {
                DataGrid1.RowDetailsVisibilityMode = Microsoft.Windows.Controls.DataGridRowDetailsVisibilityMode.Visible;

                for (int i = 0; i < DataGrid1.Items.Count-1; i++)
                {
                    Microsoft.Windows.Controls.DataGridRow row = (Microsoft.Windows.Controls.DataGridRow)(DataGrid1.ItemContainerGenerator.ContainerFromIndex(i));
                    DataGridDetailsPresenter presenter = FindVisualChild<DataGridDetailsPresenter>(row);
                    DataTemplate template =presenter.ContentTemplate;

                    TextBlock txt = (TextBlock)template.FindName("rowdetails", presenter);
                    txt.Text = retString;


                }

但是它出现了错误。"此操作仅对已应用此模板的元素有效。" 在以下行中显示 TextBlock txt = (TextBlock)template.FindName("rowdetails", presenter); 你有没有想法我的代码哪里错了。我想通过检查复选框来显示所有行详情。我的数据模板在这里。
<WpfToolkit:DataGrid.RowDetailsTemplate>

            <DataTemplate>

                <StackPanel HorizontalAlignment="Stretch" Orientation="Vertical" Margin="5">
                    <TextBlock Foreground="CadetBlue" FontSize="14"
                        TextWrapping="Wrap" Name="rowdetails" HorizontalAlignment="Stretch"
                        />
                </StackPanel>
            </DataTemplate>


        </WpfToolkit:DataGrid.RowDetailsTemplate>

当你使用 x:Name="rowdetails" 时会发生什么? - Jake Berger
仍然存在相同的错误。毫无差别。 - Firdavs Kurbonov
1个回答

1
我通过在行详细信息加载中添加一些代码来解决了这个问题。以下是代码。
        TextBlock txt1 = e.DetailsElement.FindName("rowdetails") as TextBlock;
        txt1.Text = retString; // where retString is variable string. 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接