2010-11-19 20 views
0

Supposons que j'ai un UserControl Editor il a un TextBox. Il a également une propriété Content. Ici, je mis tout le contenu du texte à une valeur statique « Hey »TextBox dans UserControl ne s'affiche pas correctement

<UserControl x:Class="WpfApplication1.Editor" ...> 
    <TextBox Text="Hey" /> 
    <!--<TextBox Text="{Binding Content}" />--> 
</UserControl> 

J'ai une fenêtre pour afficher tout cela.

<Window x:Class="WpfApplication1.Window1" ...> 
    <StackPanel> 
     <local:Editor Content="Heya" /> 
    </StackPanel> 
</Window> 

Quand je cours, je reçois

alt text

Son même pas une zone de texte? Et pourquoi puis-je obtenir le contenu défini dans <local:Editor />. J'ai essayé Clean & Solution de reconstruction et je reçois toujours cette chose bizarre.

Répondre

2

Problème


assez simple. Un UserControl est juste un ContentControl, donc il a une propriété de dépendance nommée Content. Lorsque vous définissez cette propriété, vous définissez l'intégralité du contenu de votre ContentControl. La propriété Content est la propriété par défaut (regardez les propriétés par défaut pour WPF sur MSDN).

<UserControl x:Class="WpfApplication1.Editor" ...> 

    <!-- Here, you set the Content property (because it is 
    the default one) of the UserControl as a TextBox with 
    the text "Hey". --> 

    <TextBox Text="Hey" /> 
</UserControl> 

Comparez ci-dessus et ci-dessous: codes

<!-- Here, the Content property is explicitly set. --> 
<local:Editor Content="Heya" /> 

Dans les deux cas, vous définissez la propriété de contenu avec un contenu différent ...


Solution


Pour résoudre votre problème, définissez une coutume DependencyProperty dans Editor nommé TextContent par exemple, et procédez comme suit:

<UserControl x:Class="WpfApplication1.Editor" ...> 
    <TextBox Text="{Binding TextContent, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" /> 
</UserControl> 

Et:

<local:Editor TextContent="Heya" /> 
+0

Ah ... Enfin, après si longtemps de se gratter ma tête! –