滑块控制行为更改

时间:2012-07-09 10:56:40

标签: windows-phone-7

我在wp7中创建了一个滑块来控制backgroundaudio播放器的音量。

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

发生的事情是,我试图操纵滑块,但滑块只是移动一小步,即使我尝试移动很长距离。 在我从滑块上移开手指之前,ManipulationCompleted事件不会被触发,但它也只是设置较小的值更改。

在我的应用中导航一次到另一个页面后会发生此行为。 如果我重新启动应用程序,它会再次运行。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,解决方案由Paul Sinnema发布并且工作正常!

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" />