Что такое хороший способ получить элементы управления в DataTemplate? Я использовал технику передачи события Loaded для контроля интереса, а также с помощью VisualTreeHelper для просмотра визуального дерева, и ни один из них не очень изящный. Каков хороший способ доступа к элементам управления DataTemplate?Программный доступ к элементу управления с DataTemplate
В одном примере мне нужно добавить привязку whos ConverterParameter не знает во время разработки, и поскольку привязка к ConverterParameters не поддерживается, мне нужно создать привязку в коде. В идеале я хотел бы иметь возможность сделать это где-то иначе, чем обработчик события Loaded для элемента управления в datatemplate.
Фактически, в этом случае обработка событий не работает вообще и вызывает исключение OutOfMemoryException. Вот моя попытка:
Generic.xaml:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SilverlightTest">
<Style TargetType="local:TemplatedControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:TemplatedControl">
<ListBox ItemsSource="{TemplateBinding ListBoxItemsSource}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock x:Name="SomeTextBlock"
Loaded="SomeTextBlock_Loaded"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
templatedcontrol.cs:
public class TemplatedControl : Control
{
public object ListBoxItemsSource
{
get { return (object)GetValue(ListBoxItemsSourceProperty); }
set { SetValue(ListBoxItemsSourceProperty, value); }
}
public static readonly DependencyProperty ListBoxItemsSourceProperty =
DependencyProperty.Register
("ListBoxItemsSource", typeof(object),
typeof(TemplatedControl), new PropertyMetadata(null));
public TemplatedControl()
{
this.DefaultStyleKey = typeof(TemplatedControl);
}
public void SomeTextBlock_Loaded(object sender, RoutedEventArgs ea)
{
}
}
Не могли бы вы рассказать об этом немного, чтобы включить сценарий, где это было бы полезно? –
Добавляя к вопросу ... –