XAML中的用户控件仅显示名称

时间:2016-08-24 07:53:14

标签: c# wpf xaml xamarin

我试图在XAML中使用用户控件,经过一段时间和几个教程我设法得到它"工作" (阅读'它构建没有错误')。但是当我运行它时,我所能看到的(而不是2个测试标签)是Class的名称。

这是我的代码: 用户控件:

<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();
        }
    }
}

主窗口:

<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,&#34; Config&#34;不是实际项目中使用的命名空间,它有一个前缀,因此它不是指C#Config命名空间。我删除了前缀以隐藏&#39;源项目。

正如您可能也注意到的那样,MainWindow和用户控件位于不同的项目中,但它会按照应有的方式进行选择。当我在用户控件中写入错误时,主窗口在导入usercontrol的行上给出了错误。主窗口中还显示了全名和命名空间。所以他们确实知道彼此。但我似乎无法在那里展示实际的控件。

2 个答案:

答案 0 :(得分: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>

主窗口:

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

答案 1 :(得分:0)

UserControl的派生不正确。

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