2012-07-09 4 views
0

J'ai créé un curseur dans wp7 pour contrôler le volume du fond sonore.Changement de comportement du curseur

<Slider x:Name="VolumeSlider" Height="89" Margin="12,0,24,-20" VerticalAlignment="Bottom" ManipulationCompleted="OnSoundManipulationChanged" Maximum="100" SmallChange="1" LargeChange="100" Value="75"/> 

Ce qui se passe est, j'essaie de manipuler le curseur, mais le curseur se déplace juste un petit pas, même si je tente de déplacer une longue distance. L'événement ManipulationCompleted n'est pas déclenché tant que je ne retire pas mon doigt du curseur, mais que ce dernier modifie également la valeur.

Ce problème se produit après avoir navigué une fois vers une autre page de mon application. Cela fonctionne à nouveau si je redémarre l'application.

Répondre

0

J'ai trouvé une solution à cela, la solution a été postée par Paul Sinnema et a bien fonctionné!

http://forums.create.msdn.com/forums/p/82897/501068.aspx

using System.Windows; 
using System.Windows.Controls; 

namespace ControlClassLibrary 
{ 
public class PSSlider : Slider 
{ 
    public PSSlider() 
    { 
    } 

    public UIElement GestureListenerBug 
    { 
     get { return (UIElement)GetValue(GestureListenerBugProperty); } 
     set { SetValue(GestureListenerBugProperty, value); } 
    } 

    public static readonly DependencyProperty GestureListenerBugProperty = 
     DependencyProperty.Register("GestureListenerBug", typeof(UIElement), typeof(PSSlider), new PropertyMetadata(null)); 

    protected override void OnMouseEnter(System.Windows.Input.MouseEventArgs e) 
    { 
     SetHitTestVisibility(false); 

     base.OnMouseEnter(e); 
    } 

    protected override void OnMouseLeave(System.Windows.Input.MouseEventArgs e) 
    { 
     SetHitTestVisibility(true); 

     base.OnMouseLeave(e); 
    } 

    private void SetHitTestVisibility(bool visible) 
    { 
     if (GestureListenerBug != null) 
     { 
      GestureListenerBug.IsHitTestVisible = visible; 
     } 
    } 
} 

}

<ct:PSPhoneApplicationPage x:Class="MCRemote.MainPage" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
         xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
         xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:cv="clr-namespace:MCRemote.Converters" 
         xmlns:ct="clr-namespace:ControlClassLibrary;assembly=ControlClassLibrary" 
         xmlns:co="clr-namespace:MCRemote.Controls" 
         xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" 
         mc:Ignorable="d" 
         x:Name="Main" 
         SupportedOrientations="Portrait" 
         Orientation="Portrait" 
         shell:SystemTray.IsVisible="True" 
         Loaded="PhoneApplicationPageLoaded" 
         d:DesignHeight="768" 
         d:DesignWidth="480" 
         Foreground="White"> 

...

  <ct:PSSlider x:Name="VolumeSlider" 
         GestureListenerBug="{Binding ElementName=Main}" 
         Maximum="1" 
         Minimum="0" 
         SmallChange="0.01" 
         LargeChange="0.1" 
         ManipulationStarted="SliderManipulationStarted" 
         ManipulationCompleted="SliderManipulationCompleted" 
         Value="{Binding PlaybackInfo.BoundVolume, Mode=TwoWay}" 
         Grid.Column="1" 
         Grid.Row="2" /> 
Questions connexes