2017-02-27 4 views
0

Ich möchte die ContentTemplateRoot-Eigenschaft des ListBoxItem programmgesteuert ändern. Es enthält einen Textblock, aber ich möchte es in ein Raster gruppieren und ein paar neue Elemente hinzufügen.Wie Sie ContentTemplateRoot programmgesteuert in uwp ändern?

Ich habe meine eigene Klasse:

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

Ich versuchte einfach, den Inhalt zu ändern, aber es funktioniert nicht ...

Eigentlich mag ich die ContentTemplateRoot Eigenschaft auf ein Raster ändern. ..

Antwort

1

ich habe das gemacht, es sieht aus wie es funktioniert: (es nur zu zeigen, ist, wie es zu tun, nicht perfekt, hat einigen unnötigen Code)

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; 
} 
Verwandte Themen