2017-12-26 7 views
0

Um eine templemate zu machen, dass ich ein paar Mal in meiner Klasse wird eingefügt, machte ich ein neues XAML-Element:Holen Bezug auf XAML-Element nicht von dieser Klasse

<Page 
    x:Class="App1.EntryPage_Field" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:App1" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d"> 

    <Grid Name="GridItem" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Width="300" Height="400"> 
     <TextBlock Text="test"></TextBlock> 
    </Grid> 
</Page> 

Jetzt will ich die GridItem bekommen und platziere es in meiner Klasse, aber ich kann keinen Hinweis darauf bekommen.

  Grid el = (Grid)EntryPage_Field.FindName("GridItem"); 
      ViewGrid.Items.Add(el); 

Kompiliert überhaupt nicht.

  Grid el = (Grid)FindName("GridItem"); 
      ViewGrid.Items.Add(el); 

Abstürze wie el ist Null.

Nur um klar zu stellen, ich möchte, dass mein Tempelfreund jedes Mal leer ist, wenn ich ihn benutze, also sollte ich vielleicht irgendwo anders anrufen?

+0

Was ist ein "Tempelmate", und welches Problem wollten Sie lösen, indem Sie diesen Code schreiben? Das sieht wie ein [X Y Problem] aus (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem), das nicht sehr schwer zu lösen sein sollte. Wie es scheint, versuchen Sie anscheinend, WPFs Template-Funktion neu zu erfinden, was eine schlechte Idee ist. Besser und viel einfacher, nur um die Funktion, die sie dir gaben, richtig zu nutzen. –

+0

Wenn Sie eine Reihe von diesen hinzufügen, werden sie alle den gleichen Namen haben, da sie fest codiert sind, so dass Sie keinen bestimmten Namen auswählen können. Möglicherweise möchten Sie prüfen, ob Sie dies als Benutzersteuerelement anstelle einer Seite implementieren und den Namen leer lassen. Sie können jedem Namen einen anderen Namen zuweisen, wenn Sie ihn dem übergeordneten Element hinzufügen. Auf diese Weise können Sie auf einen beliebigen Namen verweisen. –

+0

Warum gehen Sie damit in Schwierigkeiten: 'Grid el = (Grid) EntryPage_Field.FindName (" GridItem ");'? Warum verwenden Sie die 'GridItem'-Variable nicht direkt? – JohnyL

Antwort

0

Um die GridItem Grid von der Seite zu erhalten, können Sie Ihre EntryPage_FieldKlasse Objektinstanz verwenden.

Versuchen Sie den folgenden Code, um die GridItem aus der EntryPage_Field Klasse zu bekommen, dann steckte sie in ViewGrid Grid Hexe ist in einer anderen Seite. Bevor Sie das GridItem in ViewGrid hinzufügen, sollten Sie sicherstellen, dass das GridItem nicht das untergeordnete Element eines anderen Steuerelements oder einer anderen Seite ist.

private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    EntryPage_Field myPage = new EntryPage_Field(); 
    Grid myGrid = (Grid)myPage.FindName("GridItem"); 
    myPage.Content = null; 
    ViewGrid.Children.Add(myGrid); 
} 
Verwandte Themen