传递和存储字符串
本文关键字:字符串 存储 | 更新日期: 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
,那么您可以将其隐藏在Hyperlink
的Tag
中:
Hyperlink link = new Hyperlink(run);
link.Tag = classID;
link.Click += Link_Click;
然后在Click
处理程序中获取它:
classIDClicked = link.Tag as string;
你不需要一个隐藏的TextBlock