2010-06-25 7 views
1

Je tente de concevoir un ensemble d'icônes dans les ressources d'un contrôle utilisateur Silverlight 4, puis de les afficher sur un bouton.Le bouton de liaison de données échoue sur le contenu d'une ressource statique

J'ai

<UserControl.Resources>   
    <Rectangle x:Key="Icon1" Fill="Black" Width="10" Height="10" />    
</UserControl.Resources> 

et

<Button x:Name="Button1" 
     Width="50" Height="50"       
     Content="{Binding Source={StaticResource Icon1}}" /> 

J'ai aussi essayé ... Content="{StaticResource Icon1}". Les deux s'affichent correctement dans le concepteur XAML de VS 2010, mais échouent lorsque j'essaie de l'exécuter avec une exception XAMLParseException. Le premier se plaint que l'argument ne tombe pas dans la fourchette attendue, le second dit simplement "Impossible d'assigner la propriété". Copier le rectangle dans le contenu des boutons fonctionne directement.

Où est le problème? Je pensais que j'ai finalement compris cela .. =/

Répondre

2

Je suggère d'utiliser un modèle au lieu de définir le contenu de toute façon.

<ControlTemplate 
    x:Key="IconTemplate"> 
     <Rectangle x:Key="Icon1" Fill="Black" Width="10" Height="10" /> 
</ControlTemplate> 

<Style x:Key="IconStyle" TargetType="Button"> 
     <Setter Property="Template" Value="{StaticResource IconTemplate}"/> 
</Style> 

<Button x:Name="Button1" 
     Width="50" Height="50"       
     Style="{StaticResource IconStyle}" /> 

HTH

+0

Merci pour votre réponse! Je voudrais savoir pourquoi vous choisissez cette approche au lieu de définir le contenu directement? – Jens

+0

Quelques raisons; 1) Il semble être la façon dont MS veut que nous utilisions WPF 2) Cela peut être testé mieux, pour s'assurer que les éléments (modèles et styles) sont disponibles pour le contrôle 3) Pour moi c'est une approche plus évolutive, mais qui pourrait être discutable –

+0

J'ai essayé cette approche, mais il semble que mon (triggerbehavior) VisualStates du contrôle à l'intérieur du modèle n'est pas maintenu. aucune idée pourquoi? –

0

J'accompli en réglant le ContentTemplate à un DataTemplate:

<UserControl.Resources>   
    <DataTemplate x:Key="Icon1"> 
     <Rectangle Fill="Black" Width="10" Height="10" />    
    </DataTemplate> 
</UserControl.Resources> 

Button:

<Button x:Name="Button1" 
     Width="50" Height="50"       
     ContentTemplate="{StaticResource Icon1}" /> 

Réglage du modèle sur le bouton fonctionne aussi, mais je Je crois que vous devez remplacer l'ensemble du modèle pour le contrôle. Cette approche vous permet de conserver le modèle de contrôle existant.

+0

... J'ai fait ça dans WPF mais je pense que ça marche aussi pour Silverlight. –

Questions connexes