0

私のXAML:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition Width="auto"/>
    </Grid.ColumnDefinitions>
    <Slider Name="sldLength" Margin="0 0 0 0"  Grid.Column="0" 
            Minimum="5" Maximum="30" SmallChange="1"  LargeChange="1"
            Value="10" ValueChanged="sldLength_ValueChanged"/>
    <TextBlock Name="tblLength" Margin="0 10 5 0" Text="10" Grid.Column="1"
            FontSize="{StaticResource PhoneFontSizeMediumLarge}"/>
</Grid>

私のコードが始まりました:

private void sldLength_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    tblLength.Text = e.NewValue.ToString();
}

2 つの問題:

  1. アプリケーションが読み込まれると ValueChanged イベントが発生します。これは問題ではありませんが、何らかの理由でイベント発生時に tblLength が NULL であり、これが例外をスローするため、その NULL をチェックするifステートメントでラップしましたが、これは確かに問題になるべきではありませんか?
  2. SmallChange と LargeChange が 1 に設定されていても、Slider は 1 ずつ変化しません。どうすれば修正できますか?

助けてくれてありがとう...

- 編集 -

Chepene 提案で問題 1 を解決しました。
少し生意気なイベント ハンドラーで問題 2 を解決しました。

private void sldLength_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    ((Slider)sender).Value = Math.Round(((Slider)sender).Value);
}
4

2 に答える 2

1

バインディングを使用できます。次のようにします。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition Width="auto"/>
    </Grid.ColumnDefinitions>
    <Slider Name="sldLength" Margin="0 0 0 0"  Grid.Column="0" 
            Minimum="5" Maximum="30" SmallChange="1"  LargeChange="1"
            Value="10"/>
    <TextBlock Name="tblLength" Margin="0 10 5 0" Text="{Binding ElemantName=sldLength, Path=Value}" Grid.Column="1"
               FontSize="{StaticResource PhoneFontSizeMediumLarge}"/>
</Grid>

ここで、tblLength は、sldLength の値からテキストを取得します。

于 2013-06-13T11:14:31.983 に答える