我有一个由Silverlight ItemsControl显示的字符串列表。 DataTemplate是一个边框控件,其TextBlock作为其子元素。如何访问与项目对应的边框控件?例如,我可能想要这样做来改变背景颜色。
答案 0 :(得分:2)
更简单的方法是抓取文本块的Parent并将其转换为Border。这是一个简单的例子:
的Xaml
<Grid>
<ItemsControl x:Name="items">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border>
<TextBlock MouseEnter="TextBlock_MouseEnter" MouseLeave="TextBlock_MouseLeave" Text="{Binding}" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
背后的代码
public Page()
{
InitializeComponent();
items.ItemsSource = new string[] { "This", "Is", "A", "Test" };
}
private void TextBlock_MouseEnter(object sender, MouseEventArgs e)
{
var tx = sender as TextBlock;
var bd = tx.Parent as Border;
bd.Background = new SolidColorBrush(Colors.Yellow);
}
private void TextBlock_MouseLeave(object sender, MouseEventArgs e)
{
var tx = sender as TextBlock;
var bd = tx.Parent as Border;
bd.Background = new SolidColorBrush(Colors.White);
}
该示例通过抓取文本框的父级来设置边框上的背景。
答案 1 :(得分:0)
您可以覆盖ItemsControl.GetContainerForItemOverride方法并将对象 - 容器对保存在字典中。
答案 2 :(得分:0)
请参阅:http://msdn.microsoft.com/en-us/library/bb613579.aspx和此:http://blogs.msdn.com/wpfsdk/archive/2007/04/16/how-do-i-programmatically-interact-with-template-generated-elements-part-ii.aspx。不幸的是,它不能在SL中工作,因为SL DataTemplate类没有FindName方法。