獲取DataTemplate中控件的好方法是什麼?我已經使用了處理感興趣控件的Loaded事件的技巧,並且使用VisualTreeHelper來遍歷視覺樹,而這些都不是很優雅。訪問DataTemplate控件的好方法是什麼?以編程方式從DataTemplate訪問控件
在一個示例中,我需要添加綁定whos ConverterParameter在設計時不知道,並且由於不支持綁定到ConverterParameters,所以我需要在代碼中創建綁定。理想情況下,我希望能夠在數據模板中的控件之外的Loaded事件處理程序之外執行此操作。
事實上,在這種情況下,處理事件根本不起作用,並導致出現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)
{
}
}
請問您是否可以擴展這一點以包含一個可能有用的場景? – 2009-09-07 13:54:34
添加到問題... – 2009-09-09 20:14:40