Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 时间表列表视图_Wpf_Silverlight_Xaml_Winrt Xaml - Fatal编程技术网

Wpf 时间表列表视图

Wpf 时间表列表视图,wpf,silverlight,xaml,winrt-xaml,Wpf,Silverlight,Xaml,Winrt Xaml,我正在开发一个显示时间表的应用程序,如下所示: 但是,我有几个问题: 当有太多的项目(分钟)无法显示在一行中时 应自动分为几行(例如,之后的所有行 06(应包装) 我不知道分钟项目的间隔是从哪里来的。不是 项目的保证金 当用手指滚动时间表列表时,只有在没有触摸分钟框的情况下才会滚动。否则,分钟框会移动一点,而不是 整个时间表 时间表列表绑定到时间表小时不稳定的可观察集合: public class TimetableHour { public sbyte Hour { get; set

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

但是,我有几个问题:

  • 当有太多的项目(分钟)无法显示在一行中时 应自动分为几行(例如,之后的所有行 06(应包装)
  • 我不知道分钟项目的间隔是从哪里来的。不是 项目的保证金
  • 当用手指滚动时间表列表时,只有在没有触摸分钟框的情况下才会滚动。否则,分钟框会移动一点,而不是 整个时间表
  • 时间表列表绑定到时间表小时不稳定的可观察集合:

    public class TimetableHour
    {
        public sbyte Hour { get; set; }
        public IList<TimetableItem> Items { get; set; }
    
        public string HourString
        {
            get { return Hour.ToString("00") + ":"; }
        }
    }
    
    public class TimetableHour
    {
    公共sbyte小时{get;set;}
    公共IList项{get;set;}
    公共字符串HourString
    {
    获取{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" />
    
    
    提示
    
    好的,所以我算出了:

  • 要使分钟项目换行,我需要指定确切的宽度 用于显示它们的GridView的。或者,我可以使用网格而不是StackPanel,以允许使用所有可用空间-请参阅
  • 要控制GridView项目周围的间距,需要定义
    ItemContainerStyle如下所述:
  • 为了实现这一点,我可以在GridView上设置IsSwipeEnabled=“False”