Winrt依赖项属性Visual Studio XAML错误

本文关键字:Studio XAML 错误 Visual 属性 依赖 Winrt | 更新日期: 2023-09-27 17:59:27

这是我的Dependency属性:

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

然后我这样使用它:

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

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

然而,如果我在这样的控制模板中定义它:

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

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

Winrt依赖项属性Visual Studio XAML错误

由于缺乏进一步的源代码,我只能参考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
    }
}

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

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

这可能不是你的风格,但应该解决设计师的问题。