附加的事件处理程序的代码生成的DataTemplate
-
22-07-2019 - |
题
我要这个相关的一个问题:我想一个事件附加到我的StackPanel,但它不会出现使用XamlReader时进行连接。我不能让ChildItem_Load方法被调用。有谁知道的方式做到这一点?
除了这个事件的代码工作正常。
this._listBox.ItemTemplate = (DataTemplate) XamlReader.Load(
@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
<Border>
<StackPanel Loaded=""ChildItem_Loaded"">
<TextBlock Text=""{Binding " + this._displayMemberPath + @"}"" />
</StackPanel>
</Border>
</DataTemplate>"
解决方案
确定,我想出了一个位一个“黑客”溶液中,但它的工作原理。
因为它看起来像我创建的延伸和StackPanel的“烤入” Load事件中的DataTemplate当XamlReader没有本地命名空间的任何知识。这不完全理想,但它的工作原理:
this._listBox.ItemTemplate = (DataTemplate) XamlReader.Load(
@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
xmlns:foo=""clr-namespace:Foo;assembly=Foo"">
<Border>
<foo:ExtendedStackPanel>
<TextBlock Text=""{Binding " + this._displayMemberPath + @"}"" />
</foo:ExtendedStackPanel>
</Border>
</DataTemplate>"
);
和扩展的类:
public class ExtendedStackPanel : StackPanel
{
public ExtendedStackPanel() : base()
{
this.Loaded += new RoutedEventHandler(this.ChildItem_Loaded);
}
private void ChildItem_Loaded(object sender, RoutedEventArgs e)
{
// Logic here...
}
}
不隶属于 StackOverflow