0

バックグラウンドオーディオプレーヤーの音量を制御するために、wp7 でスライダーを作成しました。

<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 回移動した後に発生します。アプリを再起動すると、再び機能します。

4

1 に答える 1

0

私はこれに対する解決策を見つけました.解決策はポール・シネマによって投稿され、うまくいきました!

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" /> 
于 2012-07-09T11:53:26.097 に答える