Найти элемент пользовательского интерфейса, соответствующий элементу в элементе управления Silverlight - PullRequest
1 голос
/ 12 ноября 2008

У меня есть список строк, отображаемых в Silverlight ItemsControl. DataTemplate - это элемент управления Border с TextBlock в качестве дочернего элемента. Как я могу получить доступ к пограничному контролю, соответствующему предмету? Например, я могу захотеть сделать это, чтобы изменить цвет фона.

Ответы [ 3 ]

2 голосов
/ 12 ноября 2008

Более простой способ сделать это - взять Родителя текстового блока и привести его в качестве Границы. Вот быстрый пример этого:

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

Пример устанавливает фон на границе, захватывая родительский элемент текстового поля.

0 голосов
/ 13 мая 2010

см. Это: 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.

0 голосов
/ 12 ноября 2008

Вы можете переопределить метод ItemsControl.GetContainerForItemOverride и сохранить пары объект-контейнер в словаре.

...