ListView的时间表

时间:2013-04-29 11:47:40

标签: wpf silverlight xaml winrt-xaml

我正在开发一个提供时间表的应用,如下所示: my timetable

但是,我有几个问题:

  1. 当有太多项目(分钟)显示在1行时 应该在几行中自动断开(例如,之后的所有行) 06应该被包裹)
  2. 我不知道分钟物品的间距来自哪里。不是 item`s margin。
  3. 使用手指滚动时间表列表时,如果未触摸分钟框,则仅滚动时间表列表。否则分钟框会移动一点,而不是 整个时间表清单。
  4. 时间表列表绑定到TimetableHour instaces的ObservableCollection:

    public class TimetableHour
    {
        public sbyte Hour { get; set; }
        public IList<TimetableItem> Items { get; set; }
    
        public string HourString
        {
            get { return Hour.ToString("00") + ":"; }
        }
    }
    

    和XAML页面:

    <Style TargetType="ListView" x:Key="TimetableListViewStyle">
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden" />
        <Setter Property="Margin" Value="0,0,60,0" />
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBox Text="{Binding HourString}" 
                                 Width="60" Height="50"
                                 TextAlignment="Center"
                                 Background="CornflowerBlue" Foreground="White" BorderThickness="0"
                                 FontSize="23"
                                 Padding="10">
                        </TextBox>
    
                        <GridView ItemsSource="{Binding Items}" Height="Auto" SelectionMode="None" IsTapEnabled="False" IsHoldingEnabled="False" >
                            <GridView.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <WrapGrid Orientation="Horizontal" />
                                </ItemsPanelTemplate>
                            </GridView.ItemsPanel>
                            <GridView.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Background="LightSkyBlue" Width="60" Height="50">
                                        <TextBlock Text="{Binding Minute}" HorizontalAlignment="Center" FontSize="17" FontWeight="Medium" Margin="0,2,0,0"></TextBlock>
                                        <TextBlock  HorizontalAlignment="Center">Tip</TextBlock>
                                    </StackPanel>
                                </DataTemplate>
                            </GridView.ItemTemplate>
                        </GridView>
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    
    <ListView Grid.Row="2" Grid.Column="2" ItemsSource="{Binding Timetable}"
                          Style="{StaticResource TimetableListViewStyle}"
                          SelectionMode="None" />
    

1 个答案:

答案 0 :(得分:1)

好的,所以我想出来了:

  1. 要使分钟项目换行,我需要指定确切的宽度     用于显示它们的GridView。或者,我可以使用Grid而不是StackPanel来允许使用所有可用空间 - 请参阅GridView width inherited from parent
  2. 要控制GridView项目周围的间距,您需要定义
    ItemContainerStyle如下所述: Windows8 ListView and space between items
  3. 为实现这一点,我可以在GridView上设置IsSwipeEnabled =“False”。