LoopingSelector没有显示出来

时间:2012-05-25 00:19:39

标签: c# windows-phone-7 silverlight-toolkit

我正在使用本教程中显示的LoopingSelectorWP7-LoopingSelector-in-depth--Part1。我刚刚复制了他们的XAML和C#代码。我修改了XAML以适应我的布局,但它仍然类似于他们的教程。

这是我放置LoopingSelector的XAML代码:

<Grid>
    <StackPanel Grid.Row="2">
        <TextBlock Text="Countdown Time" HorizontalAlignment="Center"
                   FontSize="28" />
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
            <toolkitPrimitives:LoopingSelector x:Name="hSelector"
                               ItemMargin="2,3,3,2" ItemSize="100,100" />
            <TextBlock Text=":" VerticalAlignment="Center" FontSize="64"
                       FontFamily="{StaticResource Digital7}"/>
            <toolkitPrimitives:LoopingSelector x:Name="mSelector"
                               ItemMargin="2,3,3,2" ItemSize="100,100" />
            <TextBlock Text="'" VerticalAlignment="Center" FontSize="64"
                       FontFamily="{StaticResource Digital7}"/>
            <toolkitPrimitives:LoopingSelector x:Name="sSelector"
                               ItemMargin="2,3,3,2" ItemSize="100,100" />
        </StackPanel>
    </StackPanel>
</Grid>

其中toolkitPrimitives定义为:

xmlns:toolkitPrimitives="clr-namespace:Microsoft.Phone.Controls.Primitives;assem‌​bly=Microsoft.Phone.Controls.Toolkit"

这就是我在后面的代码中所做的:

this.hSelector.DataSource = new IntLoopingDataSource()
{
    MinValue = 0,
    MaxValue = 23,
    SelectedItem = 0
};
this.mSelector.DataSource = new IntLoopingDataSource()
{
    MinValue = 0,
    MaxValue = 59,
    SelectedItem = 1
};
this.sSelector.DataSource = new IntLoopingDataSource()
{
    MinValue = 0,
    MaxValue = 59,
    SelectedItem = 0
};

我会使用TimePicker,但不支持挑选Second。我需要选择小时,分钟,秒。

2 个答案:

答案 0 :(得分:2)

通过一些实验,我发现,由于某些未知原因,LoopingSelector根本不喜欢StackPanel。如果你想拥有许多LoopingSelector,实现它的最好方法就是建立一个网格。

这是我修改过的XAML:

<Grid>
<StackPanel Grid.Row="2">
                        <TextBlock Text="Countdown Time" HorizontalAlignment="Center" FontSize="28" />
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="1*"/>
                                <ColumnDefinition Width="0.1*"/>
                                <ColumnDefinition Width="1*"/>
                                <ColumnDefinition Width="0.1*"/>
                                <ColumnDefinition Width="1*"/>
                            </Grid.ColumnDefinitions>
                            <toolkitPrimitives:LoopingSelector Grid.Column="0" x:Name="hSelector" ItemMargin="2,3,3,2" ItemSize="100,100" Height="300"/>
                            <TextBlock Grid.Column="1" Text=":" VerticalAlignment="Center" FontSize="64" FontFamily="{StaticResource Digital7}"/>
                            <toolkitPrimitives:LoopingSelector Grid.Column="2" x:Name="mSelector" ItemMargin="2,3,3,2" ItemSize="100,100" Height="300"/>
                            <TextBlock Grid.Column="3" Text="'" VerticalAlignment="Center" FontSize="64" FontFamily="{StaticResource Digital7}" />
                            <toolkitPrimitives:LoopingSelector Grid.Column="4" x:Name="sSelector" ItemMargin="2,3,3,2" ItemSize="100,100" Height="300"/>
                        </Grid>
                    </StackPanel>
</Grid>

如果我错了,请随意纠正我。

P.S。对于熟悉StackOverflow的人,请帮我在帖子中格式化这些XAML,因为我不知道如何正确格式化。

答案 1 :(得分:2)

您需要在循环选择器上设置WidthHeight以及ItemSize此控件不能处理没有绝对大小的情况。这就是它在StackPanel中不起作用的原因。

StackPanels提供无限的宽度和高度。

通常控件应该处理这些情况,但作为一个原始控件,他们假设这些值将被设置。