2010-08-27 7 views
0

Salut à tous, j'ai ce problème vraiment gênant ... je le EventTrigger ci-dessous:XAML Manchettes ne fonctionne pas dans eventtriggers personnalisés

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(); 
       } 
      } 
     } 
    } 
} 

Tout cela fonctionne parfaitement et compiles bien sauf quand je tente de se lier à elle dans un 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> 

Lorsque je tente de lancer, je rencontre des problèmes ... dit 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) 

Donc ce n'est pas vraiment amusant du tout .... Toutes les idées seraient grandement appréciés :)

Jourdan

Répondre

1

Est-ce une partie correcte?

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

Cela ne devrait-il pas être "{Binding SoundPath}" ou autre chose?

+0

Désolé oui vous avez raison, qui était une faute de frappe de ma part! Éditera OP :) – jourdant

0

Où avez-vous déclaré "SoundPath"?

Si c'est un DependencyProperty, la vous devez utiliser:

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

Si elle est déclarée comme ressource:

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