2016-08-01 11 views
8

To moja własność Zależność:Winrt Dependency Property Błąd Visual Studio XAML.

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

I następnie używać go tak:

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

Działa to doskonale w czasie projektowania i biegać razem.

Jednak gdybym zdefiniować go wewnątrz szablonu sterowania jak ten:

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

Działa przy starcie, ale nie w studiu projektanta Wizualnej

+0

Po prostu pytanie: dlaczego umieszczasz jeszcze inny przycisk w ButtonTalk? – lokusking

+0

Dlaczego cię to nie obchodzi w projektancie? – MichaelThePotato

+0

@lokusking to dzieje się wewnątrz dowolnego szablonu kontrolnego. –

Odpowiedz

2

Ze względu na brak dalszego kodu źródłowego po prostu może odnosić do wytycznych implementacji msdn dotyczących dependency properties.

Utwórz oddzielną klasę dla przycisku dźwiękowego, który pochodzi od Button np. "SoundButton" i zarejestruj swoją własność za pomocą programu pobierającego i ustawiającego.

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 
    } 
} 

Wtedy można go używać w kodzie, jak jest, bez rejestracji własności dependecy w XAML:

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

To nie może być zrobione w swoim stylu, ale powinno rozwiązać problemy markowe .

Powiązane problemy