2016-08-24 3 views
0

Я пытаюсь использовать пользовательские элементы управления в XAML, через некоторое время и несколько учебников мне удалось заставить его «работать» (читай «он строит без ошибок»). Однако, когда я запускаю его, все, что я вижу (вместо двух тестовых меток), - это имя класса.Пользовательский контроль в XAML показывает только имя

Вот мой код: 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(); 
     } 
    } 
} 

MainWindow:

<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 MainWindow:

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» - это не пространство имен, используемое в фактическом проекте, есть префикс, поэтому он не относится к пространству имен C# Config. Я удалил префикс, чтобы «скрыть» исходный проект.

Как вы могли заметить, MainWindow и usercontrol находятся в разных проектах, но он выбирает его так, как должен. Когда я написал ошибку в пользовательском элементе управления, mainwindow дал ошибку в строке, где импортируется usercontrol. Также полное имя и пространство имен показаны в главном окне. Значит, они знают друг друга. Но я, похоже, не могу показать фактические элементы управления.

+0

Вы пытались установить свои значения 'Высота' и' Ширина'? – Pikoh

+0

Да, попробовал один, но получение «The BindableProperty» Height «is readonly» error – Lonefish

+0

Поскольку я новичок во всем, что касается XAML, я следовал учебнику, в учебнике использовалась сетка. Он прекрасно компилируется. Он работает. Он просто не действует так, как это должно было ... Пробовал и другие вещи, но они даже ничего не делали. Я полностью открыт для других подходов, пока он начинает работать :) – Lonefish

ответ

2

управления пользователя

<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

С UserControl в другом проекте.

Сначала создайте проект библиотеки пользовательского управления wpf и добавьте в него usercontrol. тот же код, что и выше.

затем добавить ссылку на проект в основной проект.

<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

. Что вы выведете UserControl1 из кода? – Lonefish

+0

нет, я добавляю его из xaml. –

+0

По-видимому, мы не собираемся использовать пользовательские элементы управления. Спасибо за помощь. – Lonefish

0

Неправильный вывод вашего UserControl.

public partial class UCTest : UserControl 
{ 
    public UCTest() 
    { 
     InitializeComponent(); 
    } 
} 
Смежные вопросы