web-dev-qa-db-fra.com

Ajouter un contrôle utilisateur à une fenêtre wpf

J'ai un contrôle utilisateur que j'ai créé, mais quand je vais l'ajouter au XAML dans la fenêtre, Intellisense ne le ramasse pas et je ne peux pas comprendre comment l'ajouter à la fenêtre.

61
WedTM

Vous devez ajouter une référence à l'intérieur de la balise window. Quelque chose comme:

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

(Lorsque vous ajoutez xmlns: controls = "intellisense devrait démarrer pour rendre ce bit plus facile)

Ensuite, vous pouvez ajouter le contrôle avec:

<controls:CustomControlClassName ..... />
71
Martin Harris

Vous devrez probablement ajouter le namespace :

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

quelques conseils: tout d'abord, assurez-vous qu'il y a un xmlns en haut qui inclut l'espace de noms dans lequel réside votre contrôle.

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

deuxièmement, l'intellisense est parfois stupide.

12
Muad'Dib

Voici comment je l'ai fait fonctionner:

Contrôle utilisateur 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>

Contrôle utilisateur C #

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

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