2012-02-15 2 views
0

私はここに、スライダーの値を取得することができますC#WPFのSliderの値を取得してバインドする方法は?

public void TheSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
    { 


     int k = (int)TheSlider.Value; 

     Debug.WriteLine(k); 

    } 

この部分では、私は値を取得カントので、私はそれを使用するカント:

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     _runtime.NuiCamera.ElevationAngle = (int)TheSlider.Value; 
    } 

これはXAMLでスライダーコードです:

<Slider x:Name="TheSlider" 
      DockPanel.Dock="Left" 
      Orientation="Horizontal" 
      HorizontalAlignment="Center" 
      HorizontalContentAlignment="Center" 
      Minimum="-27" 
      Maximum="27" 
      Cursor="Hand" 
      IsSnapToTickEnabled="True" 
      Margin="322,392,329,87" ValueChanged="TheSlider_ValueChanged" Width="144" /> 

ここで問題は何ですか?私を助けてくれますか?

UPDATE:

 public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     System.Windows.Data.Binding b = new System.Windows.Data.Binding(); 
     b.ElementName = "TheSlider"; 
     b.Path = new PropertyPath("Value"); 
     SetBinding(ElevationAngleProperty, b); 

    } 

    public int ElevationAngle 
    { 
     get { return _runtime.NuiCamera.ElevationAngle; } 

     set { _runtime.NuiCamera.ElevationAngle = value; OnPropertyChanged("ElevationAngle"); } 
    } 


    public DependencyProperty ElevationAngleProperty { get; set; } 
+0

まあ... WPFで知っているように、あなたは本当にバインディングではありません。今のところ、TheSlider_ValueChangedメソッド内でElevationAngleを変更することができます。 – NestorArturo

+0

私はそれをしましたが、メソッドTheSlider_ValueChangedの中でそれを行うと、アプリケーションの実行が停止します。 ElevationAngleはWindow_Loaded内にある必要があります。 :S – Samet

+0

それは本当に奇妙に聞こえる。エラーが報告されましたか? – NestorArturo

答えて

0

仰角は、依存関係プロパティである場合は、あなたが直接スライダ値に依存関係プロパティをバインドすることができます。

それは通常のCLRプロパティであれば、仰角

 <Slider x:Name="TheSlider"      DockPanel.Dock="Left"      Orientation="Horizontal"      HorizontalAlignment="Center"      HorizontalContentAlignment="Center"      Minimum="-27"      Maximum="27"      Cursor="Hand"      IsSnapToTickEnabled="True"      Margin="322,392,329,87" ValueChanged="TheSlider_ValueChanged" Width="144" Value="{Binding Path=ElevationAngle,Mode=OneWayToSource}" 
/> 

public int ElevationAngle 
     { 
      get { return _elevationAngle ; } 

      set { _elevationAngle = value; OnPropertyChanged("ElevationAngle ");} 
     } 
を変更したときに、ここで仰角が通知を送る必要があることを注意して、スライダーのValueプロパティをバインドOnApplyTemplate機能に

public override void OnApplyTemplate() 
     { 
      base.OnApplyTemplate(); 
      Binding b = new Binding(); 
      b.ElementName = "TheSlider"; 
      b.Path = new PropertyPath("Value"); 
      SetBinding(ElevationAngleProperty, b); 

     } 

これを行います

+0

このソリューションをありがとう、私はすぐに試してみます... – Samet

+0

SetBinding(ElevationAngleProperty、b)でコードからエラーが発生しています。 OnPropertyChanged( "ElevationAngle");私のコードで上記のUpdateを確認してください。どこで間違っていますか? – Samet

+0

こんにちはSameet、あなたは両方のソリューションを一緒に使用しているようです。 ElevationAnglePropertyを作成する代わりに、スライダの値をElevationAngleにバインドするだけです。それは動作するはずです。 手順: 1.AppleTemplate関数とElevationAnglePropertyを削除する 2.スライダ値をElevationAngleにバインドする –

4

スライダの値を設定したいときラベルの内容として、私は単にこれで行く:

<Label Content="{Binding ElementName=mySlider, Path=Value}"/> 

あなたは自分のスライダーがその値を変更するたび、あなたの価値を保存する必要が整数として値を表示したいときに。

<Slider Name="mySlider" ValueChanged="SliderValueChanged" /> 

... 
this.sliderValue = (int) mySlider.Value; 

次に、ラベルの内容をバインドします。

関連する問題