我想将SoundPlayerAction的Source属性指定为资源。我尝试了以下方法,但这不起作用,因为字符串不是需要Uri的属性的有效值。
<Window.Resources>
<sys:String x:Key="Test">/SoundFile.wav</sys:String>
</Window.Resources>
<SoundPlayerAction Source="{DynamicResorce Test}" />
有没有办法让它发挥作用?
答案 0 :(得分:2)
将XML名称空间声明为
xmlns:sys="clr-namespace:System;assembly=system"
和资源
<sys:Uri x:Key="Test">/SoundFile.wav</sys:Uri>
如果声音文件是汇编资源,则或者可能为Resource File Pack URI:
<sys:Uri x:Key="Test">pack://application:,,,/SoundFile.wav</sys:Uri>
答案 1 :(得分:1)
我发现唯一可行的解决方案是使用转换器:
public class UriConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (!(value is string)) return value;
var filename = value as string;
return new Uri(filename, UriKind.RelativeOrAbsolute);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
然后在xaml文件中:
<Window.Resources>
<sys:String x:Key="MyFile">/SoundFile.wav</sys:String>
<converter:UriConverter x:Key="UriConverter" />
</Window.Resources>
<SoundPlayerAction Source="{Binding Source={StaticResource MyFile}, Converter={StaticResource UriConverter}, Mode=OneWay}" />