2011-10-11 2 views
1

Je cherche à créer un objet ItemsControl personnalisé dans lequel les éléments imbriqués utilisent la liaison ElementName à un autre contrôle. Pour la norme ItemsControl cela fonctionne très bien et les travaux de liaison comme prévuLiaison ElementName pour les éléments d'un objet ItemsControl personnalisé

<ItemsControl> 
    <TextBox Text="{Binding Text, ElementName=test, UpdateSourceTrigger=PropertyChanged}"/> 
</ItemsControl> 
<TextBox x:Name="test"/> 

Cependant, dès que suit

<!-- CustomItemsControl.xaml --> 
<ItemsControl x:Class="MyControl.CustomItemsControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"/> 

<!-- CustomItemsControl.xaml.cs --> 
namespace MyControl 
{ 
    public partial class CustomItemsControl 
    { 
     public CustomItemsControl() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

<!-- Window.xaml --> 
<local:CustomItemsControl> 
    <TextBox Text="{Binding Text, ElementName=test, UpdateSourceTrigger=PropertyChanged}"/> 
</local:CustomItemsControl> 
<TextBox x:Name="test"/> 

Je viens d'utiliser un contrôle personnalisé héritant de ItemsControl Ensuite, la ElementName liaison est pas plus de travail. Est-ce que quelqu'un d'autre a vu ce problème et sait comment le résoudre?

Toute aide grandement appréciée.

+0

La publication du code pour votre CustomItemsControl serait utile. –

+0

Ajout du code ci-dessus. –

Répondre

1

Pourquoi avez-vous besoin du fichier xaml pour votre CustomControl? Vous avez juste besoin de créer une classe dans votre espace de noms local comme celui-ci qui hérite de ItemsControl-

public class CustomItemsControl : ItemsControl 
    { 

    } 

Et cela devrait fonctionner comme vous le souhaitez .. !!

+0

La raison pour le XAML est que je veux avoir une disposition spécifique du modèle qui est cachée aux utilisateurs de ce contrôle. Cependant, la suppression de InitializeComponent() fonctionne très bien. Savez-vous pourquoi le fait de supprimer cela le corrige? –

+3

InitializeComponent() enregistre le 'NameScope' pour le contrôle personnalisé donné et le remplacement de' NameScope' perd la pertinence de 'ElementName'. http://msdn.microsoft.com/en-us/library/ms746659.aspx –

Questions connexes