我的usercontrol上有多个文本块Layoutroot问题是如何通过名称找到特定的TextBlock?
感谢名单
答案 0 :(得分:7)
var myElement =
((FrameworkElement)System.Windows.Application.Current.RootVisual)
.FindName("TextBlockName");
如果文本块已经被渲染,应该适用于这种情况。
为了能够像@ColinE提到的那样更容易地遍历可视树,您还可以使用Silverlight工具包。
// requires System.Windows.Controls.Toolkit.dll
using System.Windows.Controls.Primitives;
var myElement = myRoot.GetVisualDescendants().OfType<TextBlock>()
.Where(txb => txb.Name == "TextBlockName").FirstOrDefault();
答案 1 :(得分:3)
如果您要创建UserControl,那么您通过x:Name
命名的任何元素都可以作为代码隐藏中的字段使用。
如果您没有创建UserControl,可以通过Linq to VisualTree搜索可视树...
TextBlock block = LayoutRoot.Descendants<TextBlock>()
.Cast<TextBlock>()
.SingleOrDefault(t => t.Name == "TextBlockName");
答案 2 :(得分:1)
public void refreshAttachmentList(ListlistOfControlsRequest,int identifier) {
string valueName = "attachmentsField_"+identifier;
var mylistAttachment = ((FrameworkElement)System.Windows.Application.Current.RootVisual).FindName(valueName);
ListBox listAttachRequest = mylistAttachment as ListBox;
listAttachRequest.ClearValue(ItemsControl.ItemsSourceProperty);
listAttachRequest.ItemsSource = listOfAttachmentsControls;
listAttachRequest.....all properties
}