2

我正在开发一个显示时间表的应用程序,如下所示: 我的时间表

但是,我有几个问题:

  1. 当在 1 行中显示的项目(分钟)太多时,应自动将其拆分为几行(例如,应包装 06 之后的所有行)
  2. 我不知道分钟项目周围的间距来自哪里。这不是项目的边距。
  3. 用手指滚动时间表列表时,只有在没有触摸分钟框时才会滚动。否则分钟框会移动一点,而不是整个时间表列表。

时间表列表绑定到 TimetableHour 实例的 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" />
4

1 回答 1

1

好的,所以我想通了:

  1. 为了使分钟项目换行,我需要指定用于显示它们的 GridView 的确切宽度。或者,我可以使用 Grid 而不是 StackPanel,以允许使用所有可用空间 - 请参阅从父级继承的 GridView 宽度
  2. 要控制 GridView 项目周围的间距,您需要定义
    ItemContainerStyle,如下所述: Windows8 ListView and space between items
  3. 为此,我可以在 GridView 上设置 IsSwipeEnabled="False"。
于 2013-05-07T13:07:00.403 回答