2017-02-27 45 views
0

我想以编程方式更改ListBoxItem的ContentTemplateRoot属性。它包含一个文本块,但我想将它分组成一个网格并添加一些新的元素。如何在uwp中以编程方式更改ContentTemplateRoot?

我有我自己的类:

public class MyListboxItemClass : ListBoxItem 
{ 
     protected override void OnPointerMoved(PointerRoutedEventArgs e)  
     {   
     // here I want to add those new elements as parent of my content...   
     } 
} 

我想简单地改变内容,但它不工作...

其实我想了ContentTemplateRoot属性更改为一个网格。 ..

回答

1

我做这个,它看起来像它的工作原理:(这只是显示如何能做到这一点,不完美的,有一些不必要的代码)

private object oldRootContent; 

public ListboxGestureHandlerItem() 
{ 
    Loaded += ListboxGestureHandlerItem_Loaded; 
    LayoutUpdated += ListboxGestureHandlerItem_LayoutUpdated; 
} 

private void ListboxGestureHandlerItem_LayoutUpdated(object sender, object e) 
{ 
    if(oldRootContent != null && (ContentTemplateRoot as Grid) != null) 
    { 
     (ContentTemplateRoot as Grid).Children.Add(oldRootContent as FrameworkElement); 
     oldRootContent = null; 
    } 
} 

private void ListboxGestureHandlerItem_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e) 
{ 
    oldRootContent = (sender as ListboxGestureHandlerItem).ContentTemplateRoot; 

    this.ContentTemplate = Create(typeof(Grid)); 
} 

protected override void OnPointerMoved(PointerRoutedEventArgs e) 
{ 
    base.OnPointerMoved(e); 
} 

public DataTemplate Create(Type type) 
{ 
    return XamlReader.Load(@"<DataTemplate 
xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> 
    <" + type.Name + @"/> 
</DataTemplate>") as DataTemplate; 
} 
相关问题