传递和存储字符串

本文关键字:字符串 存储 | 更新日期: 2023-09-27 18:16:01

我试图传递一些字符串(className &classID)并将它们存储在不同的变量中(classnamecclicked &classIDClicked),基于用户点击了哪个超链接。

下面是我创建超链接的代码(c#):
TextBlock txt = new TextBlock();                                        
txt.TextWrapping = TextWrapping.Wrap;                                   
txt.Foreground = Brushes.Black;                                         
txt.FontFamily = new FontFamily("Times New Roman");                       
txt.FontSize = 25;                                                      
txt.Margin = new Thickness(5);
TextBlock ClassID = new TextBlock();
ClassID.Visibility = Visibility.Collapsed;
ClassID.Text = classID;
Run run = new Run(className);                                           
Hyperlink link = new Hyperlink(run);                                    
link.Click += Link_Click;                                               
txt.Inlines.Add(ClassID);
txt.Inlines.Add(link);
myStackPanel.Children.Add(txt);                                         
frame.Content = myStackPanel;

通过使用下面的代码从超链接中提取文本,我能够将字符串从className传递给classnameclick:

private void Link_Click(object sender, RoutedEventArgs e)
{
     classNameClicked = ((sender as Hyperlink).Inlines.FirstInline as Run).Text;
     classIDClicked = (sender as Textblock).Text;
     Class_Page class_page = new Class_Page();
     NavigationService.Navigate(class_page);
}

然而,我似乎不知道如何从classID中提取字符串。请帮助。

传递和存储字符串

你只需要引用你的Hyperlink的父级。

所以不用

classNameClicked = ((sender as Hyperlink).Inlines.FirstInline as Run).Text;
classIDClicked = (sender as TextBlock).Text;

你可以写

Hyperlink link = sender as Hyperlink;
classNameClicked = (link.Inlines.FirstInline as Run).Text;
classIDClicked = (link.Parent as TextBlock).Inlines.OfType<Run>().First().Text;

如果你不想使用LINQ,你也可以这样写:

classIDClicked = ((link.Parent as TextBlock).Inlines.FirstInline as Run).Text;

但是我和matt在评论中的总体观点是一样的。这真的很难看,MVVM可以用来编写更简洁的代码。

另外,你可能还应该添加一些null检查。

按注释的要求编辑:
如果您不想在GUI中显示classID,那么您可以将其隐藏在HyperlinkTag中:

Hyperlink link = new Hyperlink(run);
link.Tag = classID;
link.Click += Link_Click;

然后在Click处理程序中获取它:

classIDClicked = link.Tag as string;

你不需要一个隐藏的TextBlock