WP8 Slider的问题

时间:2013-06-12 22:02:08

标签: windows-phone-8 slider nullreferenceexception

我的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并且这会抛出异常,我将它包装在 if 语句检查该NULL,但这肯定不应该是问题吗?
  2. 滑块不会以1为增量进行更改,即使SmallChange和LargeChange设置为1.如何修复?
  3. 有任何帮助......

    - 编辑 -

    用Chepene建议解决了问题1 解决问题2与小厚脸皮事件处理程序:

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

2 个答案:

答案 0 :(得分:1)

您可以使用Bindings。 像这样的Smth:

<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的值中获取其文本。

答案 1 :(得分:0)

这对我来说非常合适。首先检查Slider的OldValue,无论是否为null。

private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
   if(slider.OldValue != null)
   {
      textbox1.Text = silder1.Value.ToString();
   }
}
希望这有帮助。