Winrt依赖项属性Visual Studio XAML错误.

Coo*_*eze 8 c# visual-studio windows-runtime winrt-xaml

这是我的Dependency属性:

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

然后我像这样使用它:

<Button buttonDependencyObject:ButtonDependencyObject.ButtonTapSound="{Binding ElementName=TapSound}" ... />
Run Code Online (Sandbox Code Playgroud)

这在设计时和运行时非常有效.

但是,如果我在控件模板中定义它,如下所示:

<ControlTemplate x:Name="TapSound" TargetType="Button">
      <Button buttonDependencyObject:ButtonDependencyObject.ButtonTapSound="{Binding ElementName=TapSound}" ...  />
 </ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

它在运行时工作,但在Visual Studio设计器中不工作

Ast*_*ian 2

由于缺乏进一步的源代码,我只能参考 msdn 关于依赖属性的实现指南。

为您的声音按钮创建一个单独的类,该类派生自Button“SoundButton”,并使用 getter 和 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
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以在代码中按原样使用它,而无需在 xaml 中注册 dependency 属性:

 <local:SoundButton ButtonTapSound="{Binding ElementName=TapSound}"></local:SoundButton>
Run Code Online (Sandbox Code Playgroud)

这可能不符合您的风格,但应该解决设计师的问题。