So fügen Sie eine Mischung Verhalten in einem Stil-Setter
Habe ich crated eine Mischung Verhalten für die Taste. Wie kann ich einstellen, dass auf alle meine Buttons in der app.
<Button ...>
<i:Interaction.Behaviors>
<local:MyBehavior />
</i:Interaction.Behaviors>
</Button>
Aber wenn ich versuche:
<Style>
<Setter Property="i:Interaction.Behaviors">
<Setter.Value>
<local:MyBehavior />
</Setter.Value>
</Setter>
</Style>
Bekomme ich die Fehlermeldung
Die Eigenschaft "Verhalten" nicht über eine zugängliche setter.
InformationsquelleAutor der Frage Jobi Joy | 2009-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem und ich habe zu einer Lösung zu kommen. Ich fand diese Frage, nachdem ich es gelöst und ich sehe, dass meine Lösung birgt viele Gemeinsamkeiten mit Mark. Dieser Ansatz ist jedoch ein wenig anders.
Das Hauptproblem ist, dass behaviors und Trigger zuordnen, mit einem spezifischen Objekt und so kann man nicht mit derselben Instanz von einem Verhalten für mehrere andere verbundene Objekte. Wenn Sie definieren Ihr Verhalten der inline-XAML setzt diese eins-zu-eins-Beziehung. Jedoch, wenn Sie versuchen, ein Verhalten, ein Stil, der Stil kann immer wieder verwendet werden für alle Objekte gilt, und das werfen von Ausnahmen in der Basis-Klassen Verhalten. In der Tat, die Autoren gingen erhebliche Mühe, uns daran zu hindern, auch nur zu versuchen, dies zu tun, zu wissen, dass es nicht funktionieren würde.
Das erste problem ist, dass wir uns nicht selbst konstruieren, ein Verhalten setter-Wert, da der Konstruktor ist eine interne. Also müssen wir unser eigenes Verhalten auslösen und die collection-Klassen.
Das nächste problem ist, dass das Verhalten auslösen und die angefügte Eigenschaften nicht haben, setter und so Sie können nur Hinzugefügt werden, mit in-line-XAML. Dieses problem lösen wir mit unserem eigenen angehängten Eigenschaften zu manipulieren, dass das primäre Verhalten und trigger-Eigenschaften.
Das Dritte problem ist, dass unser Verhalten-Sammlung ist nur für einen einzigen Stil Ziel. Dies lösen wir durch den Einsatz einer wenig genutzten XAML-Funktion
x:Shared="False"
legt eine neue Kopie der Ressource, die jedes mal verwiesen wird.Das Letzte problem ist, dass behaviors und Trigger sind nicht wie andere Stil-setter; wir wollen nicht, um die alten zu ersetzen Verhaltensweisen, die mit den neuen Verhaltensweisen, weil Sie tun könnten völlig unterschiedliche Dinge. Also, wenn wir akzeptieren, dass, wenn Sie ein Verhalten hinzufügen, können Sie nicht nehmen Sie es Weg (und die Möglichkeit, die Verhaltensweisen, die derzeit in Arbeit), können wir schließen, dass Verhaltensweisen und löst sein sollte, additive und diese können behandelt werden, indem Sie unsere angefügte Eigenschaften.
Hier ist ein Beispiel für die Verwendung dieses Ansatzes:
Verwendet das Beispiel löst aber Verhaltensweisen auf die gleiche Weise arbeiten. Im Beispiel zeigen wir:
Hier ein Beispiel für ein Verhalten, unsere
DebugAction
. Richtig es ist eine Aktion, die aber durch den Missbrauch der Sprache bezeichnen wir Verhaltensweisen, von Auslösern und Handlungen "Verhaltensweisen".Schließlich, unsere Kollektionen und die angefügten Eigenschaften dieser alle Arbeit. Durch Analogie mit
Interaction.Behaviors
die Immobilie, die Sie Ziel genanntSupplementaryInteraction.Behaviors
weil durch das festlegen dieser Eigenschaft, die Sie hinzufügen Verhaltensweisen zuInteraction.Behaviors
und ebenfalls für Trigger.und dort haben Sie es, voll funktionsfähige Verhaltensweisen und löst durch Stile angewendet.
InformationsquelleAutor der Antwort Rick Sladkey
1.Erstellen Angefügte Eigenschaft
2.Erstellen Sie ein Verhalten
3.Erstellen Sie einen Stil aus und legen Sie die angefügte Eigenschaft
InformationsquelleAutor der Antwort Roman Dvoskin
Summierung Antworten und diesen tollen Artikel Mischung Verhaltensweisen im Stilekam ich zu diesem generischen kurze und bequeme Lösung:
Ich aus einer generischen Klasse, die vererbt werden könnte durch irgendein Verhalten.
So könnte man einfach wiederverwenden es mit vielen Komponenten wie diese:
Und in XAML genug zu erklären:
Also im Grunde die AttachableForStyleBehavior Klasse gemacht xaml Dinge, die Registrierung der Instanz von Verhalten für jede Komponente in der Art. Für mehr details, siehe bitte den link.
InformationsquelleAutor der Antwort Roma Borodov
Ich habe noch eine andere Idee, um zu vermeiden, die Schaffung einer angefügten Eigenschaft für jedes Verhalten:
Verhalten creator Schnittstelle:
Kleine Helfer Kollektion:
Helper-Klasse legt das Verhalten:
Nun Ihr Verhalten, das implementiert IBehaviorCreator:
Und benutzen es jetzt in xaml:
InformationsquelleAutor der Antwort Andi
Konnte ich nicht finden die original-Artikel, aber ich war in der Lage, neu zu erstellen die Wirkung.
InformationsquelleAutor der Antwort Jonathan Allen
Erklären individuelles Verhalten/trigger als Ressourcen :
Legen Sie Sie in der Sammlung :
InformationsquelleAutor der Antwort AnjumSKhan
Verhalten der code erwartet eine Visuelle, so können wir hinzufügen, dass es nur auf einer visuellen. So ist die einzige option, die ich sehen konnte, ist das hinzufügen zu einem element innerhalb der ControlTemplate-so wie man das Verhalten Hinzugefügt, um den Stil und die Auswirkungen auf die Instanz eines bestimmten Steuerelements.
InformationsquelleAutor der Antwort Jobi Joy
Den Artikel Einführung in die Angehängten Behaviors in WPF implementiert eine angefügte Verhalten mit Stil nur, und kann auch noch hilfreich.
Die Technik, die in der "Einführung in die Angebrachten Verhaltensweisen" Artikel vermeidet die Interaktivität-tags ganz, mit auf Stil. Ich weiß nicht, ob dies ist, nur weil es eine etwas ältere Technik, oder, wenn das immer noch gewährt einige Vorteile, wo sollte man es lieber in einige Szenarien.
InformationsquelleAutor der Antwort Bill
Ich mag den Ansatz gezeigt, indem die Antworten von Roman Dvoskin und Jonathan Allen in diesem thread. Als ich zuerst lernen, dass die Technik, obwohl ich profitierte von diesem blog-post die weitere Erklärung über die Technik. Und alles zu sehen im Kontext, hier die gesamte source-code für die Klasse, von der der Autor spricht darüber in seinem blog-post.
InformationsquelleAutor der Antwort Jason Frank