2016-08-24 1 views
0

Ich versuche Benutzersteuerelemente in XAML zu verwenden, nach einer Weile und mehreren Lernprogrammen habe ich es geschafft, es "arbeiten" (lesen Sie "es baut ohne Fehler"). Aber wenn ich es ausführe, ist alles, was ich sehen kann (anstelle von 2 Testschildern) der Name der Klasse.Benutzersteuerung in XAML zeigt nur Name

Hier ist mein Code: Usercontrol:

<Grid xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="Config.UCTest"> 
    <Label Text="TEST" VerticalOptions="Center" HorizontalOptions="Center">TEST</Label> 
    <Label Text="TEST" VerticalOptions="Center" HorizontalOptions="Center" Margin="150,10,10,10">TEST</Label> 

</Grid> 

Codebehind Usercontrol:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

using Xamarin.Forms; 

namespace Config 
{ 
    public partial class UCTest : Grid 
    { 
     public UCTest() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

Hauptfenster:

<Window x:Class="Config.WPF.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:Config.WPF" 
     xmlns:control="clr-namespace:Config;assembly=Config" 
     mc:Ignorable="d" 
     Title="MainWindow" SizeToContent="WidthAndHeight" Height="154" Width="363"> 
    <control:UCTest/> 
</Window> 

Codebehind Hauptfenster:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using Config; 
using System.IO; 

namespace Config.WPF 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

BTW, "Config" ist nicht der Namespace, der im aktuellen Projekt verwendet wird. Es gibt ein Präfix, sodass es sich nicht auf einen C# -Konfigurations-Namespace bezieht. Ich habe das Präfix gelöscht, um das Quellprojekt auszublenden.

Wie Sie vielleicht bemerken, befinden sich MainWindow und usercontrol in verschiedenen Projekten, aber sie nehmen es so auf, wie es sollte. Wenn ich einen Fehler in das Benutzersteuerelement geschrieben habe, gab das Hauptfenster einen Fehler in der Zeile, in der der Benutzersteuerelement importiert wird. Auch der vollständige Name und der Namespace werden im Hauptfenster angezeigt. Sie kennen sich also gegenseitig. Aber ich kann nicht scheinen, die tatsächlichen Kontrollen dort zu zeigen.

+0

Haben Sie versucht, die Werte für "Höhe" und "Breite" der Steuerung zu setzen? – Pikoh

+0

Ja, habe das versucht, aber "BindableProperty" Height bekommen "ist nur lesen" Fehler – Lonefish

+0

Da ich ein Anfänger in allen Dingen bin, die XAML betreffen, folgte ich einem Tutorial, Tutorial verwendet ein Gitter. Es kompiliert gut. Es läuft. Es verhält sich einfach nicht so, wie es soll. Habe auch andere Dinge versucht, aber sie haben gar nichts gemacht. Ich bin völlig offen für andere Ansätze, solange es zu arbeiten beginnt :) – Lonefish

Antwort

2

Benutzer Control

<UserControl x:Class="WpfApplication1.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup- compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition></ColumnDefinition> 
       <ColumnDefinition></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
       <TextBlock Text="TEST" VerticalAlignment="Center" Foreground="Black" HorizontalAlignment="Center" Grid.Column="0"></TextBlock> 
       <TextBlock Text="TEST" VerticalAlignment="Center" Foreground="Black" HorizontalAlignment="Center" Grid.Column="1" ></TextBlock> 
     </Grid> 
    </UserControl> 

Mainwindow:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:controls="clr-namespace:WpfApplication1" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
    <controls:UserControl1 Width="200" Height="200"></controls:UserControl1> 
    </Grid> 
</Window> 

enter image description here

Mit Usercontrol in anderen Projekt.

Erstellen Sie zuerst WPF-Benutzersteuerungsbibliotheksprojekt und fügen Sie usercontrol darin hinzu. gleicher Code wie oben.

dann fügen Sie den Projektverweis in das Hauptprojekt ein.

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

    xmlns:WpfControlLibrary1="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1" x:Class="WpfApplication1.MainWindow" 

    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 

     <WpfControlLibrary1:UserControl1 HorizontalAlignment="Left" Margin="154,81,0,0" VerticalAlignment="Top" Height="120" Width="172"/> 

    </Grid> 
</Window> 
+0

Worauf leiten Sie UserControl1 in Codebehind ab? – Lonefish

+0

Nein, ich füge es von XAML hinzu. –

+0

Anscheinend werden wir nicht Benutzersteuerelemente schließlich verwenden .. Danke für die Hilfe tho. – Lonefish

0

Die Ableitung Ihres UserControl ist nicht korrekt.

public partial class UCTest : UserControl 
{ 
    public UCTest() 
    { 
     InitializeComponent(); 
    } 
} 
Verwandte Themen