2016-08-01 19 views
8

Đây là tài sản phụ thuộc của tôi:Winrt Dependency Property Lỗi XAML Visual Studio.

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

tôi sau đó sử dụng nó như thế này:

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

này hoạt động hoàn hảo tại thời gian thiết kế và thời gian chạy.

Tuy nhiên nếu tôi định nghĩa nó bên trong một mẫu kiểm soát như thế này:

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

Nó hoạt động khi chạy nhưng không phải trong Studio thiết kế trực quan

+0

Chỉ cần một câu hỏi: Tại sao bạn thậm chí đặt một nút khác trong ControlTemplate của Button? – lokusking

+0

Tại sao bạn quan tâm nó không hoạt động trong nhà thiết kế? – MichaelThePotato

+0

@lokusking nó xảy ra bên trong bất kỳ mẫu điều khiển nào. –

Trả lời

2

Do thiếu của mã nguồn hơn nữa tôi chỉ có thể tham khảo hướng dẫn triển khai của msdn về dependency properties.

Tạo một lớp riêng biệt cho nút âm thanh của bạn có nguồn gốc từ Button ví dụ: "SoundButton" và đăng ký thuộc tính của bạn với getter và 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 
    } 
} 

Sau đó, bạn có thể sử dụng nó trong mã của bạn vì nó là, mà không cần đăng ký tài sản dependecy trong XAML:

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

này có thể không được thực hiện trong phong cách của bạn, nhưng nên giải quyết các vấn đề thiết kế .

Các vấn đề liên quan