2011-07-22 5 views
1

Je veux définir mon décorateur personnalisé qui contient du contenu utilisateur. Mais il échoue toujours quand j'essaie de définir le nom d'un contrôle. Je reçois toujours cette exception en essayant de le faire:Comment définir UserControl avec un contenu personnalisé?

Impossible de définir la valeur d'attribut de nom 'butt' sur l'élément 'Button'. 'Button' est sous la portée de l'élément 'UserControl1', qui avait déjà un nom enregistré lorsqu'il était défini dans une autre portée.

Je ne comprends pas pourquoi cela se produit. Voici le codez:

<UserControl x:Class="WpfApplication5.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" 
      x:Name="control"> 
    <ContentPresenter Content="{Binding ElementName=control, Path=DataContext}" /> 
</UserControl> 

<Window x:Class="WpfApplication5.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication5" 
     Title="MainWindow" Height="350" Width="525"> 
    <local:UserControl1> 
     <local:UserControl1.DataContext> 
      <Button x:Name="butt" /> 
     </local:UserControl1.DataContext> 
    </local:UserControl1> 
</Window> 

Comment faire cela correctement?

+0

Vous ne pouvez pas nommer dans le contrôle de l'utilisateur de commande, au moins en WPF4. – Code0987

+0

Je peux si UserControl a la même mise en page, mais défini par programme (sans fichier XAML) – Poma

+0

Mais XAML façon ce n'est pas possible. J'ai lu quelque part que j'ai oublié. – Code0987

Répondre

0

Utilisez DataContext = "{Binding ElementName = butt}" à la place. Ou si 4 dot-net, utilisez x: Référence:

<local:UserControl1 DataContext="{Binding ElementName=butt}"> 

Ou

<local:UserControl1 DataContext="{x:Reference butt}"> 

Vous pouvez alors définir votre bouton dans la fenêtre pour faire les liaisons que vous essayez de faire probablement.

0

Vous ne pouvez pas nommer les éléments dans UserControls, quelqu'un a considéré que c'était un bug mais je ne sais pas si c'est le cas, dans tous les cas, cela ne fonctionnera pas. Vous pouvez déclarer le bouton en tant que ressource de votre fenêtre, puis l'insérer via StaticResource, mais le nom ne sera pas enregistré en tant que champ dans la classe de fenêtre.

De toute façon, avez-vous vraiment besoin du nom?

Edit: également voir this question.

Questions connexes