我有一个应该在触摸屏上使用的 WPF 应用程序。对于整个应用程序,我被要求在按下屏幕上的按钮时播放声音。我的想法是创建一种样式来执行此操作,将资源字典包含在我的应用程序中。效果很好。但是,这种样式位于单独的DLL中,我希望我的主应用程序更改声音文件的路径(下面的BoutonClickSound URL)。但是我找不到办法。我尝试了几件丑陋的事情,例如:
System.Windows.Application.Current.Resources.MergedDictionaries[0]["BoutonClickSound"] = new Uri(m_MainVM.ButClickSoundPath);
System.Windows.Application.Current.Resources.MergedDictionaries[0].MergedDictionaries[0]["BoutonClickSound"] = new Uri(m_MainVM.ButClickSoundPath);
但是它们似乎都不起作用...
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=PresentationFramework"
xmlns:sys="clr-namespace:System;assembly=System">
<sys:Uri x:Key="BoutonClickSound">c:buttonclick.wav</sys:Uri>
<Style TargetType="{x:Type FrameworkElement}" x:Key="SoundButton">
<Style.Triggers>
<EventTrigger RoutedEvent="PreviewMouseDown">
<SoundPlayerAction x:Name="SoundPlayer" Source="{DynamicResource BoutonClickSound}" />
</EventTrigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type primitives:Selector}" x:Key="SoundSelectionChange">
<Style.Triggers>
<EventTrigger RoutedEvent="SelectionChanged">
<SoundPlayerAction x:Name="SoundPlayer" Source="{DynamicResource BoutonClickSound}" />
</EventTrigger>
</Style.Triggers>
</Style>
知道如何做到这一点吗?
谢谢。
只需使用相同的键声明一个本地资源。
如果要在应用程序中全局使用它,则可以在包含库中的合并词典后将其添加到合并词典中。
添加另一个条目,如下所示:
<sys:Uri x:Key="BoutonClickSound">c:differentfile.wav</sys:Uri>
它应该导致您的样式改用该文件。
编辑:
若要在代码隐藏中设置资源,首先必须将其添加到本地资源字典中:
Resources.Add("BoutonClickSound", new Uri("your uri here"));
添加后,如果以后要更改它,则无法重新添加,必须对其进行修改:
Resources["BoutonClickSound"] = new Uri("your uri here");