2017-02-27 9 views
0

ListBoxItemのContentTemplateRootプロパティをプログラムで変更したいと考えています。それはテキストブロックを含んでいますが、私はそれをグリッドにグループ化し、いくつかの新しい要素を追加したいと思います。ContentTemplateRootをuwpでプログラム的に変更するにはどうすればよいですか?

私は自分のクラスを持っている:

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; 
} 
関連する問題