2010-12-13 7 views
4

kann nicht gefunden werden Ich möchte meine MultiDataTrigger.Conditions an Radio-Button binden, aber es funktioniert nicht. Hier ist mein Szenario.Die Quelle für die Bindung mit der Referenz

In WPF habe ich ein GridPanel, in dem Radiobuttons enthalten sein sollen.

ich erzeugen dynamische Radiobuttons in Gridpanel, wie folgt aus:

RadioButton allAccountBtn = new RadioButton(); 
allAccountBtn.Name = "allAccountBtn"; 
GridPanel.Children.Add(allAccountBtn); 

dann in meiner XAML, hatte ich ein Bild Taste, die in dieser Radiobutton Auswahl basiert wird sich ändern, und eine andere Eigenschaft der Kontrolle.

hier ist mein Code:

<Button> 
<Button.Template> 
     <ControlTemplate> 
       <Image Name="addFolderIcon" Source="Icon/Decoration/folderColor.png"> 
       <ControlTemplate.Triggers> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
            <Condition Binding="{Binding Tag, ElementName=folderBackBtn}" Value="{x:Null}"/> 
            <Condition Binding="{Binding IsChecked, ElementName=allAccountsBtn}" Value="True"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Control.IsEnabled" Value="False"/> 
          <Setter TargetName="addFolderIcon" Property="Source" Value="Icon/Decoration/folder.png"/> 
         </MultiDataTrigger> 
       </ControlTemplate.Triggers> 
     </ControlTemplate> 
</Button.Template> 
</Button> 

Wenn ich das Programm ausführen, es Fehlercode angezeigt werden: und die Bedingungen return false für die zweite Bedingung (element = allAccountsBtn) „mit Bezug zur Bindung nicht Quelle gefunden“

Warum passiert das?

Kann ich auf IsChecked-Eigenschaft aus dynamisch benanntem und generiertem RadioButton verweisen?

+0

Wenn ich Radio-Button in meinem XAML hinzufügen, kann es erkannt werden, so das Problem jetzt ist, kann ElementName dynamisch generierte Kontrolle nicht finden. – VHanded

Antwort

1

Lassen Sie uns das Problem lokalisieren. Versuchen Sie RadioButton direkt in XAML zu Ihrem GridPanel hinzuzufügen, nicht in C#. Wenn der Fehler weiterhin besteht, handelt es sich nicht um eine dynamische Methode zum Hinzufügen eines Steuerelements.

Ich denke, es gibt ein Problem mit der "Sichtbarkeit" von Steuerelementen unter Vorlagen. Sie können yourButton.ApplyTemplate() aufrufen, um das Erstellen der visuellen Struktur zu erzwingen. Aber nicht sicher, wie das im XAML gemacht wird.

+0

Ja, das Problem ist der dynamisch erzeugte RadioButton. Ich füge RadioButton lokal hinzu, und es läuft kein Fehler. Ich rufe GridPanel.ApplyTemplate() nach dem Aufruf von GridPanelChildren.Add (allAccountsBtn), nichts passieren. Gleiches passiert mit allAccountsBtn.ApplyTemplate() ... Ich muss den RadioButton dynamisch hinzufügen, da die Daten aus der Datenbank stammen. – VHanded

+0

Gelesen von irgendwo, das dynamisch erzeugte Steuer hat unterschiedlichen Namespace mit lokaler Steuerung, aber ich hatte keine Idee, wie man mit diesem Anhaltspunkt anfängt. – VHanded

+0

Es ist in Ordnung, ich habe einen Workaround dafür. Vielen Dank. – VHanded

2

ich bemerkt, dass Sie Name Eigenschaft auf dynamisch generierte Objekt „allAccountBtn“ (Singular „Account“) sind einstellen, aber Ihre XAML ist, ist ElementName Referenzierung ein „allAccountsBtn“ (Plural „Konten“). Versuchen Sie, sie so zu ändern, dass sie gleich sind.