我要这个相关的一个问题:我想一个事件附加到我的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...
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top