xaml - 将事件处理程序附加到代码生成的 DataTemplate

标签 xaml silverlight-3.0 datatemplate

我有一个关于 this one 的问题:我正在尝试将一个事件附加到我的 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>"

最佳答案

好的,我想出了一些“黑客”解决方案,但它有效。

由于在创建 DataTemplate 时 XamlReader 看起来似乎对本地命名空间一无所知,因此我扩展了 StackPanel 并“烘焙”了 Load 事件。这并不完全理想,但它有效:

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...
    }
}

关于xaml - 将事件处理程序附加到代码生成的 DataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1650294/

相关文章:

silverlight - UseLayoutRounding = true时的性能影响

wpf - 如何使用突出显示的查询词在 WPF 项目控件中显示搜索结果

wpf - XAML DataTemplate 只创建一个实例

c# - 如何以编程方式检索用于 UI 层次结构中特定元素的 DataTemplate?

c# - 绑定(bind)集合不起作用

c# - 使用 mvvm 设计模式聚焦 wpf datagrid 单元

SIlverlight 3 浏览器外高 DPI 窗口大小问题

wpf - 使用 ObjectDataProvider

WPF Boing 演示需要生命支持

silverlight-3.0 - silverlight 3最小化到托盘+从桌面拖放?