将用户控件添加到WPF窗口


69

我已经创建了一个用户控件,但是当我将其添加到窗口中的XAML时,Intellisense不会将其选中,并且我不知道如何将其添加到窗口中。

Answers:


80

您需要在window标签内添加引用。就像是:

xmlns:controls="clr-namespace:YourCustomNamespace.Controls;assembly=YourAssemblyName"

(当您添加xmlns:controls =“ intellisense时,应该可以使其变得更简单)

然后,您可以使用以下方法添加控件:

<controls:CustomControlClassName ..... />

10
现在是2015年,设计师仍然不会自动执行此操作吗? WTF!?!
BlueRaja-Danny Pflughoeft

1
@MartinHarris我应该在“ yourassemblyname”中写什么?
Mahavirsinh Padhiyar 2015年

显然,您的程序集名称-这是输出文件的名称(主要是dll)。如果输出dll的名称为awesome.assembly.dll,则“ yourassemblyname”为“ awesome.assembly”。
honzakuzel1989 '16

VS2013设计器更加快乐,省略了装配
stackuser83

VS2017现在<CustomControlClassName通过提供一个灯泡来添加名称空间来修复。:-)
David Ching

15

您可能需要添加名称空间

<Window x:Class="UserControlTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:UserControlTest"
    Title="User Control Test" Height="300" Width="300">
    <local:UserControl1 />
</Window>

13

确保xmlns控件所属的名称空间存在名称空间定义()。

xmlns:myControls="clr-namespace:YourCustomNamespace.Controls;assembly=YourAssemblyName"
<myControls:thecontrol/>

8
+1表示“有时智能是愚蠢的”。确保该项目实际上不会编译和运行,而我已经忘记了VS告诉我的xmal无效的次数,而它所需要的只是重建以使其重新考虑。
马丁·哈里斯

@MartinHarris是的!另外,我将控件放在Grid中,最初忘记为它分配Grid.Row / Grid.Column分配和Grid.RowSpan / Grid.ColumnSpan。
orangecaterpillar'5

4

这就是我的工作方式:

用户控制WPF

<UserControl x:Class="App.ProcessView"
             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>
</UserControl>

用户控制C#

namespace App {
    /// <summary>
    /// Interaction logic for ProcessView.xaml
    /// </summary>
    public partial class ProcessView : UserControl // My custom User Control
    {
        public ProcessView()
        {
            InitializeComponent();
        }
    } }

主窗口WPF

<Window x:Name="RootWindow" x:Class="App.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:app="clr-namespace:App"
        Title="Some Title" Height="350" Width="525" Closing="Window_Closing_1" Icon="bouncer.ico">
    <Window.Resources>
        <app:DateConverter x:Key="dateConverter"/>
    </Window.Resources>
    <Grid>
        <ListView x:Name="listView" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <app:ProcessView />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Window>

哇,你摇滚!非常感谢。
fatihyildizhan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.