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设计器中不工作
由于缺乏进一步的源代码,我只能参考 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)
这可能不符合您的风格,但应该解决设计师的问题。