2010-08-27 72 views
0

嘿,我有這個非常惱人的問題...我有以下以下EventTrigger:XAML綁定不定製EventTriggers工作

using System.ComponentModel; 
using System.Windows; 
using System.Windows.Interactivity; 
using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Audio; 

namespace App.Common.Actions 
{ 
    public class SoundEffectAction : TriggerAction<FrameworkElement> 
    { 
     [Category("Sound Effect")] 
     public string Source 
     { 
      get { return (string)GetValue(SourceProperty); } 
      set { SetValue(SourceProperty, value); } 
     } 

     public static readonly DependencyProperty SourceProperty = DependencyProperty.Register("Source", typeof(string), typeof(SoundEffectAction), new PropertyMetadata(string.Empty)); 

     protected override void Invoke(object parameter) 
     { 
      if (!string.IsNullOrEmpty(this.Source)) 
      { 
       var stream = TitleContainer.OpenStream(this.Source); 
       if (stream != null) 
       { 
        var effect = SoundEffect.FromStream(stream); 
        FrameworkDispatcher.Update(); 
        effect.Play(); 
       } 
      } 
     } 
    } 
} 

這一切都可以編譯和運行,除了當我試圖完全正常綁定到它的一個DataTemplate ...

<DataTemplate> 
    <StackPanel x:Name="stackPanel" Background="{StaticResource PhoneAccentBrush}" Margin="10" Height="75" Width="75" > 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="MouseLeftButtonDown" SourceName="stackPanel"> 
       <action:SoundEffectAction Source="{Binding SoundPath}"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers>         
     <TextBlock Text="{Binding Name}"/> 
    </StackPanel> 
</DataTemplate> 

當我嘗試運行此,我遇到的問題... Visual Studio中說:

System.Windows.Markup.XamlParseException occurred 
    Message=AG_E_PARSER_BAD_PROPERTY_VALUE [Line: 4 Position: 43] 
    LineNumber=4 
    LinePosition=43 
    StackTrace: 
     at MS.Internal.XcpImports.CheckHResult(UInt32 hr) 
     at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.MeasureNative(IntPtr element, Single inWidth, Single inHeight) 
     at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize) 
     at System.Windows.UIElement.Measure(Size availableSize) 
     at System.Windows.Controls.VirtualizingStackPanel.MeasureChild(UIElement child, Size layoutSlotSize) 
     at System.Windows.Controls.VirtualizingStackPanel.MeasureOverride(Size constraint) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(Size availableSize) 
     at System.Windows.Controls.ScrollContentPresenter.MeasureOverride(Size constraint) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.MeasureNative(IntPtr element, Single inWidth, Single inHeight) 
     at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize) 
     at System.Windows.UIElement.Measure(Size availableSize) 
     at System.Windows.Controls.ScrollViewer.MeasureOverride(Size constraint) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.MeasureNative(IntPtr element, Single inWidth, Single inHeight) 
     at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize) 
     at System.Windows.UIElement.Measure(Size availableSize) 
     at Microsoft.Phone.Controls.Primitives.PanoramaPanel.MeasureOverride(Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(Size availableSize) 
     at Microsoft.Phone.Controls.Panorama.MeasureOverride(Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 
     at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(Size availableSize) 
     at Microsoft.Phone.Controls.PhoneApplicationFrame.MeasureOverride(Size availableSize) 
     at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight) 

所以這不是真正樂趣可言....任何想法,將不勝感激:)

喬丹

回答

1

這是部分正確的嗎?

<action:SoundEffectAction Source="{SoundPath}"/> 

不應該是「{綁定SoundPath}」或其他?

+0

對不起,是你是對的,那是我的一個錯字!將編輯OP :) – jourdant 2010-08-28 00:14:03

0

你在哪裏聲明「SoundPath」?

如果它是一個DependencyProperty時,你應該使用:

<action:SoundEffectAction Source="{Binding Path=SoundPath, ElementName=your_element_name}"/> 

如果它被聲明爲一個資源:

<action:SoundEffectAction Source="{StaticResource your_resource_key}"/>