0

C# WPF プロジェクトでスライダーを作成し、スライダーの値をラベルに書き込みたいだけです。これはおそらく非常に簡単に実行できることはわかっていますが、うまく機能させることができません。XAML コードのスライダーは次のとおりです。

<Slider Height="21" Minimum="-255" Maximum="255" x:Name="sld_brightness" />
<Label x:Name="lb_brightness_nb" />

ここで、C# コードのスライダーの値に応じてラベルの値を変更してみます。

public void sld_brightness_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    lb_brightness_nb.Content = (int)sld_brightness.Value;
}

このコードはコンパイルされますが、何もしません。機能していません。どうしたの?

4

2 に答える 2

3

直接バインドできます。このためのイベント ハンドラーを作成する必要はありません。

<Slider Height="21" Minimum="-255" Maximum="255" x:Name="sld_brightness" />
<Label x:Name="lb_brightness_nb"
    Content="{Binding ElementName=sld_brightness,Path=Value,Converter={StaticResource DoubleToStringConverter}}" />

イベント ハンドラーを使用する場合は、ワイヤアップが不足しているように見えます。

<Slider Height="21" Minimum="-255" Maximum="255" x:Name="sld_brightness"
    ValueChanged="sld_brightness_ValueChanged" />

編集

整数のみを表示するには、IValueConverter. を使用してリソース セクションに追加し<local:DoubleToStringConverter x:Key="DoubleToStringConverter" />ます。

public class DoubleToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Math.Round((double)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2012-10-03T03:53:29.520 に答える
0

ラベルの名前が lb_brightness_nb の次に lb_brightnessValue になっていることがわかります。名前を変更してコンパイルできます。

コードは次のようになります。

public void sld_brightness_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    lb_brightness_nb.Content = sld_brightness.Value;
}
  • Value を int に変換する必要もありません。

それがあなたが話していることなのか、それとも何か他のことなのか教えてください。

于 2012-10-03T03:55:17.957 に答える