1

我有一个 Silverlight ItemsControl 显示的字符串列表。DataTemplate 是一个以 TextBlock 作为其子项的 Border 控件。如何访问与项目对应的边界控制?例如,我可能想这样做来更改背景颜色。

4

3 回答 3

2

一种更简单的方法是获取文本块的父级并将其转换为边框。这是一个简单的例子:

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);
}

该示例通过抓取文本框的父级来设置边框的背景。

于 2008-11-12T19:20:25.807 回答
0

您可以覆盖 ItemsControl.GetContainerForItemOverride 方法并将对象-容器对保存在字典中。

于 2008-11-12T13:49:16.223 回答
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 方法。

于 2010-05-13T19:17:38.137 回答