2012-04-11 4 views
0
<ToggleButton Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}" Template="{Utilities:BindableResource {Binding Path=TemplateResource}}"> 
    <ToggleButton.Style> 
     <Style TargetType="ToggleButton"> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=SelectedTemplateResource}}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

La première ressource pouvant être liée fonctionne pour "TemplateResource" sur la propriété template de togglebutton, cependant "SelectedTemplateResource" ne fonctionne pas dans le setter de tiggers. Ce code est dans un resourcedictionary où la ressource réelle est dans un resourcedictionary thématique.La ressource 1 fonctionne, 2 ne fonctionne pas

Je reçois une erreur disant que la clé est null pour xamlparseexception pour la valeur de setter. Cela fait des heures que je fais des pauses mais je n'arrive pas à comprendre pourquoi ça ne marche pas ... Si je supprime le premier style et remplace la première par la deuxième ressource, elle s'affiche correctement, mais la reliure dans le style ne fonctionnera pas .

Quelqu'un a-t-il une idée de pourquoi?

EDIT Je viens d'essayer, mais pas de chance.

   <ToggleButton Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}"> 
        <ToggleButton.Style> 
         <Style TargetType="ToggleButton"> 
          <Style.Triggers> 
           <Trigger Property="IsChecked" Value="False"> 
            <Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=TemplateResource}}" /> 
           </Trigger> 
           <Trigger Property="IsChecked" Value="True"> 
            <Setter Property="Template" Value="{Utilities:BindableResource {Binding Path=SelectedTemplateResource}}" /> 
           </Trigger> 
          </Style.Triggers> 
         </Style> 
        </ToggleButton.Style> 
       </ToggleButton> 
+0

Vous devriez regarder [la dépendance de la valeur de la propriété de dépendance] (http://msdn.microsoft.com/en-us/library/ms743230.aspx) car cela ne fonctionnerait pas même sans l'erreur. –

+0

Y at-il de toute façon autour de ça? J'ai un modèle mvvm mis en place autour des commandes et des espaces de travail et la commande est essentiellement un bouton avec une ressource thématique spécifiée ... qui fonctionne ... elle obtient juste l'effet d'une ressource d'état sélectionnée à mettre à jour lorsque le bouton est cliqué. – bl4kh4k

+1

Pour corriger la priorité, il suffit de déplacer la valeur locale ('Template =" ... "') vers un Setter dans le style. –

Répondre

0

Après avoir découvert ce qui est vraiment pas possible de faire en XAML pur j'ai fait le C# et créer un contrôle personnalisé ... ce qui est très simple et peut être amélioré et je vais devoir changer un peu de mais en fin de compte, un contrôle personnalisé résout le problème de sorte que vous pouvez cliquer sur l'événement click dans le dictionnaire de ressources et modifier le modèle à la volée.

public class TabButton : Button 
{ 
    public static readonly DependencyProperty SelectedTemplateProperty = 
     DependencyProperty.Register("SelectedTemplate", typeof(ControlTemplate), typeof(TabButton)); 

    public ControlTemplate SelectedTemplate 
    { 
     get { return base.GetValue(SelectedTemplateProperty) as ControlTemplate; } 
     set { base.SetValue(SelectedTemplateProperty, value); } 
    } 

    public TabButton() 
    { 
     this.Click += new RoutedEventHandler(TabButton_Click); 
    } 

    ~TabButton() 
    { 

    } 

    public void TabButton_Click(object sender, RoutedEventArgs e) 
    { 
     ControlTemplate template = (ControlTemplate)this.FindResource("Environmental Template Selected"); 
     (sender as TabButton).Template = template; 
    } 
} 

Cheers.

Questions connexes