首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改文本块文本仅适用于第一条记录

更改文本块文本仅适用于第一条记录
EN

Stack Overflow用户
提问于 2018-05-04 10:25:06
回答 1查看 34关注 0票数 0

嗨,我里面有数据板和文本块,我想当用户选中我的文本块时,我是这样做的:

代码语言:javascript
运行
复制
<DataGridTemplateColumn Header="نمره" MinWidth="150" Width="auto">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <StackPanel Orientation="Vertical" Margin="5" HorizontalAlignment="Right" ToggleButton.Checked="StackPanel_Checked">
                                                    <Metro:MetroSwitch Checked="chkChecked_Checked" Tag="exc" Margin="0,2">خیلی خوب</Metro:MetroSwitch>
                                                    <Metro:MetroSwitch Checked="chkChecked_Checked" Tag="good" Margin="0,2">خوب</Metro:MetroSwitch>
                                            </StackPanel>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>
                                <DataGridTemplateColumn Header="وضعیت" MinWidth="100" Width="auto">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate x:Name="myDataTemplate">
                                            <StackPanel Orientation="Vertical" Margin="5" HorizontalAlignment="Center">
                                                <Metro:MetroTextBlock Text="ثبت نشده" Foreground="Red" Name="txtStatus"/>
                                            </StackPanel>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>

和代码隐藏:

代码语言:javascript
运行
复制
private void chkChecked_Checked(object sender, RoutedEventArgs e)
        {
            Arthas.Controls.Metro.MetroTextBlock temp = FindVisualChildByName<Arthas.Controls.Metro.MetroTextBlock>(dataGrid, "txtStatus");


            switch ((sender as Arthas.Controls.Metro.MetroSwitch).Tag.ToString())
            {
                case "exc":
                    temp.Foreground = new SolidColorBrush(Colors.Green);
                    temp.Text = "شده";

                    break;
                case "good":
                    temp.Foreground = new SolidColorBrush(Colors.Green);
                    temp.Text = "شده";
                    break;    
            }
        }

但问题是只有第一个记录才会改变

每条记录包含2个复选框和1个文本块,通过选择每行中的复选框,必须更改该文本块的文本,但我的代码只适用于第一行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-04 11:09:10

我认为这可能是因为您试图在整个dataGrid中按名称查找文本块。它将始终返回具有相同名称的第一个控件。

您应该在复选框所在的行中找到textblock。

在您的方法中添加以下行:

代码语言:javascript
运行
复制
private void chkChecked_Checked(object sender, RoutedEventArgs e)
{
// this will find the datagrid item
var row = dataGrid.ContainerFromElement(sender as DependencyObject);
// now use this datagrid item to find your textblock
Arthas.Controls.Metro.MetroTextBlock temp = FindVisualChildByName<Arthas.Controls.Metro.MetroTextBlock>(row, "txtStatus");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50172713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档