2016-08-01 33 views
8

Das ist meine Abhängigkeitseigenschaft:Winrt-Abhängigkeitseigenschaft Visual Studio XAML-Fehler.

public static readonly DependencyProperty ButtonTapSoundProperty = DependencyProperty.RegisterAttached("ButtonTapSound", typeof (Uri), typeof (ButtonDependencyObject), new PropertyMetadata(default(Uri), UriChanged)); 

ich es dann wie folgt verwenden:

<Button buttonDependencyObject:ButtonDependencyObject.ButtonTapSound="{Binding ElementName=TapSound}" ... /> 

Die perfekt zur Entwurfszeit arbeitet und Zeit.

Allerdings, wenn ich es in einem Steuer Template festlegen:

<ControlTemplate x:Name="TapSound" TargetType="Button"> 
     <Button buttonDependencyObject:ButtonDependencyObject.ButtonTapSound="{Binding ElementName=TapSound}" ... /> 
</ControlTemplate> 

zur Laufzeit funktioniert, aber nicht in dem Visual Studio-Designer

+0

Nur eine Frage: Warum setzen Sie sogar eine andere Taste in ControlTemplate Button? – lokusking

+0

Warum kümmert es dich, dass es nicht im Designer funktioniert? – MichaelThePotato

+0

@lokusking es passiert in jeder Kontrollvorlage. –

Antwort

2

Aufgrund des Fehlen weiteren Quellcode kann ich einfach verweisen zu den Implementierungsrichtlinien von msdn über dependency properties.

Erstellen Sie eine eigene Klasse für Ihre Sound-Taste, die von Button, z. B. "SoundButton" abgeleitet ist und registrieren Sie Ihre Eigenschaft mit Getter und Setter.

class SoundButton : Button 
{ 
    public Uri ButtonTapSound 
    { 
     get { return (Uri)GetValue(ButtonTapSoundProperty); } 
     set { SetValue(ButtonTapSoundProperty, value); } 
    } 

    public static readonly DependencyProperty ButtonTapSoundProperty = 
     DependencyProperty.Register("ButtonTapSound", typeof(Uri), typeof(SoundButton), new PropertyMetadata(default(Uri), new PropertyChangedCallback(OnUriChanged))); 

    private static void OnUriChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     //Your code 
    } 
} 

Dann können Sie es in Ihrem Code verwenden, wie es ist, ohne dass die dependecy Eigenschaft in XAML Registrierung:

<local:SoundButton ButtonTapSound="{Binding ElementName=TapSound}"></local:SoundButton> 

Dies wird möglicherweise nicht in Ihrem Stil getan werden, sollten aber die Designer-Probleme lösen .