zoukankan      html  css  js  c++  java
  • Windows 8 系列(十一):开发小技巧分享

    临时记录、分享一些小的开发技巧:

    1. 在数据绑定时,如果数据源需要被清空:collection.Clear(); 建议在语句后把集合置为null:collection.Clear(); collection=  null;(开发过程中因为没有置为null而报错,Windows.UI.Xaml.dll的错误)

    2. async void 函数与async Task函数不能混为一谈。

     async void FUNCTIONNAME1(){ ...  await ...;  Debug.WriteLine("FUNCTIONNAME1 over")};   

       async Task FUNCTIONNAME2(){ ...  await ...;  Debug.WriteLine("FUNCTIONNAME2 over")};

       section1: FUNCTIONNAME1(); Debug.WriteLine("FUNCTIONNAME1");

     section2: await FUNCTIONNAME2(); Debug.WriteLine("FUNCTIONNAME2");

       以上两段代码中section1的代码在执行时会异步执行,有可能先输出FUNCTIONNAME1,然后输出FUNCTIONNAME1 over。第二段代码则能保证在输出FUNCTIONNAME2 over后再输出FUNCTIONNAME2。

    3. 你的代码是不是真的实现了虚拟化?不能单单看你的代码是不是写了相关控件,而需要用VirtualizingStackPanel的CleanUpVirtualizedItemEvent事件来确定是不是真正的实现了虚拟化。我们在gridview的style中修改了样式,导致上述事件不触发:

    <Style x:Key="PaddingGridViewStyle" TargetType="GridView">
            <Setter Property="Padding" Value="0,0,0,10"/>
            <Setter Property="IsTabStop" Value="False"/>
            <Setter Property="TabNavigation" Value="Once"/>
            <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
            <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Enabled"/>
            <Setter Property="ScrollViewer.IsHorizontalRailEnabled" Value="False"/>
            <Setter Property="ScrollViewer.VerticalScrollMode" Value="Disabled"/>
            <Setter Property="ScrollViewer.IsVerticalRailEnabled" Value="False"/>
            <Setter Property="ScrollViewer.ZoomMode" Value="Disabled"/>
            <Setter Property="IsSwipeEnabled" Value="True"/>
            <Setter Property="ItemContainerTransitions">
                <Setter.Value>
                    <TransitionCollection>
                        <AddDeleteThemeTransition/>
                        <ContentThemeTransition/>
                        <ReorderThemeTransition/>
                        <EntranceThemeTransition IsStaggeringEnabled="False"/>
                    </TransitionCollection>
                </Setter.Value>
            </Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="GridView">
                        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1">
                            <ScrollViewer x:Name="ScrollViewer" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" 
                                          IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsHorizontalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsHorizontalScrollChainingEnabled}" IsVerticalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsVerticalScrollChainingEnabled}" 
                                          IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" TabNavigation="{TemplateBinding TabNavigation}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" 
                                          ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}">
                                <Grid Margin="{TemplateBinding Padding}">
                                    <ItemsPresenter HeaderTemplate="{TemplateBinding HeaderTemplate}" Header="{TemplateBinding Header}" HeaderTransitions="{TemplateBinding HeaderTransitions}" />
                                </Grid>
                            </ScrollViewer>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    代码中红色的部分导致虚拟化被破坏,修改后

    <ScrollViewer x:Name="ScrollViewer" ...>
         <ItemsPresenter HeaderTemplate="{TemplateBinding HeaderTemplate}" Header="{TemplateBinding Header}" Margin="{TemplateBinding Padding}" HeaderTransitions="{TemplateBinding HeaderTransitions}" />
    </ScrollViewer>
  • 相关阅读:
    databinding在android studio2.3版本后不再默认支持使用
    html的css选择器
    补间动画Tweened Animations
    ButterKnife使用
    JDK环境变量配置
    Android学习总结——DrawerLayout 侧滑栏点击事件穿透
    Android学习总结——输入法将BottomNavigationBar(底部导航栏)顶上去的问题
    Android学习总结——INSTALL_FAILED_CONFLICTING_PROVIDER
    Android学习总结——去除标题栏
    Android学习总结——强制下线功能(广播)
  • 原文地址:https://www.cnblogs.com/lihaiyin/p/2879990.html
Copyright © 2011-2022 走看看