当前位置:  编程技术>.net/c#/asp.net
本页文章导读:
    ▪监控文件是否被更改      经常我们会碰到如果某个文件被更改,能够做出对应的操作。public class FileWatch{  public static FileSystemWatcher _fileWatcher;  private static readonly object _lockObj = new object();  private static void SetWatch(s.........
    ▪C#扩展方法           有许多扩展类的方式,如果有类的源代码,继承就是给对象添加功能的好方法,但如果没有源代码,该怎么办?此时可以使用扩展方法,它允许改变一个类,但不需要该类的源代.........
    ▪Windows 8 系列(九):关于VariableSizedWrapGrid与WrapGrid 对Visibility变化而引起的布局变化的支持      最近好久没有写博客了,今天分享一下关于工作中遇到的关于Visibility变化而引起的布局变化的问题。 先以一个小例子开场,需求: 新浪微博 添加账号界面中需要有“登陆”按钮,.........

[1]监控文件是否被更改
    来源:    发布时间: 2013-10-22

经常我们会碰到如果某个文件被更改,能够做出对应的操作。

public class FileWatch

{

  public static FileSystemWatcher _fileWatcher;

  private static readonly object _lockObj = new object();

  private static void SetWatch(string path)

  {

    if(_fileWatcher==null)

    {

      lock(_lockObj)

      {

        if(_fileWatcher==null)

        {

          FileInfo file=new FileInfo(path);

          _fileWatcher=new FileSystemWatcher(file.DirectoryName);

          _fileWatcher.Filter=file.Name;

          _fileWatcher.NotifyFilter=NotifyFilters.LastWrite;

          _fileWatcher.EnableRaisingEvents=true;

          _fileWatcher.Changed+=new FileSystemEventHandler(_watcher_Changed);

        }

      }

    }

  }

  

  static void _watcher_Changed(object sender,FileSystemEventArgs e)

  {

    try

    {

      HttpRuntime.UnloadAppDomain();

    }

    catch

    {

      

    }

  }

 

  

}

本文链接


    
[2]C#扩展方法
    来源:    发布时间: 2013-10-22

     有许多扩展类的方式,如果有类的源代码,继承就是给对象添加功能的好方法,但如果没有源代码,该怎么办?此时可以使用扩展方法,它允许改变一个类,但不需要该类的源代码。

     扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中,假如有一个Money类如下所示:

1 public class Money
2 {
3 private decimal amount;
4 /// <summary>
5 /// 金额
6 /// </summary>
7 public decimal Amount
8 {
9 get { return amount; }
10 set { amount = value; }
11 }
12 /// <summary>
13 /// 重写ToString()方法
14 /// </summary>
15 /// <returns></returns>
16 public override string ToString()
17 {
18 return "$" + Amount.ToString();
19 }
20 }

  需要一个方法AddToAmount(decimal cash).但是由于某种原因,程序集最初的源代码不能直接修改。此时我们可以创建一个静态类,把方法AddToAmount(decimal cash)添加为一个静态方法。对应的代码如下:

1 public static class ExpandMoney
2 {
3 /// <summary>
4 /// 扩展Money
5 /// </summary>
6 /// <param name="money">Money类实例</param>
7 /// <param name="cash">金额</param>
8 public static void AddToAmount(this Money money,decimal cash)
9 {
10 money.Amount += cash;
11 }
12
13 }

  注意AddToAmount()方法的参数。对于扩展方法,第一个参数是要扩展的类型,它放在this关键字的后面。这告诉编译器,这个方法是Money类型的一部分。在这个例子中。Money是要扩展的类型,在扩展方法中,可以访问扩展类型的所有公有方法和属性。调用过程如下:

1 Money money = new Money();
2 money.Amount = 23;
3 money.AddToAmount(56);
4
5 Console.WriteLine(money.Amount);//输出79
6 Console.ReadKey();

  这里即使扩展方法是静态的,也要使用类的实例来调用,而不是类型名。如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法。类中已有的任何实例方法优先。添加扩展方法ToString()如下:

1 public static class ExpandMoney
2 {
3 /// <summary>
4 /// 扩展Money
5 /// </summary>
6 /// <param name="money">Money类实例</param>
7 /// <param name="cash">金额</param>
8 public static void AddToAmount(this Money money,decimal cash)
9 {
10 money.Amount += cash;
11 }
12 /// <sum
    
[3]Windows 8 系列(九):关于VariableSizedWrapGrid与WrapGrid 对Visibility变化而引起的布局变化的支持
    来源:    发布时间: 2013-10-22

最近好久没有写博客了,今天分享一下关于工作中遇到的关于Visibility变化而引起的布局变化的问题。 

先以一个小例子开场,需求: 新浪微博 添加账号界面中需要有“登陆”按钮,当用户点击此按钮后,需要把按钮换成ProgressRing。如果登陆不成功,弹出错误信息并把ProgressRing替换成“登陆”按钮。

如下图:

在按钮与ProgressRing切换的时候我们的一般做法是两种:

1. 用两个Visibility属性隐藏其中按钮,然后再显示;

2. 删除按钮、添加ProgressRing;删除ProgressRing,添加按钮;

第二种比较浪费资源,所以大家都把第一种作为较为常用的方法,即: 用Visibility属性来控制某些UI元素的隐藏与否,特别是需要重复切换的。

 

现在切入正题,先上图:

想必玩过Win8开发的童鞋们一定不陌生,这是在VS中创建GridView模版的应用,启动后的首页面。

需求是:点击某一项,使其从界面中消失,但是布局不变,即:如果我任意删除一个单元,后面的单元会补充到前面去,中间不会有空白空间。

乍一看跟上面例子的需求类似,可以在数据集的单元数据中添加个Visibility类型的属性,通过绑定到ItemTemplate中的最外层布局控件上来实现隐藏。但是你真的这么做了,却发现结果是这样的:

 

Wow! 为什么? 如果你看看GridView的代码,并试图修改点内容,或许会有所发现:

<GridView
x:Name="itemGridView"
AutomationProperties.AutomationId="ItemGridView"
AutomationProperties.Name="Grouped Items"
Grid.RowSpan="2"
Padding="116,137,40,46"
ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"
ItemTemplate="{StaticResource Standard250x250ItemTemplate}"
SelectionMode="None"
IsSwipeEnabled="false"
IsItemClickEnabled="True"
ItemClick="ItemView_ItemClick">

<GridView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid Margin="1,0,0,6">
<Button
AutomationProperties.Name="Group Title"
Click="Header_Click"
>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Title}" Margin="3,-7,10,10" />
<TextBlock Text="{StaticResource ChevronGlyph}" FontFamily="Segoe UI Symbol" Margin="0,-7,0,10" />
</StackPanel>
</Button>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,80,0"/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</GridView.GroupStyle>
</GridView>

关键因素1:<GroupStyle.Panel>中的 VariableSizedWrapGrid

 如果把<GroupStyle.Panel>中的 VariableSizedWrapGrid替换成<StackPanel Orientation="Horizontal" Margin="0,0,80,0"/>,你会发现效果变成了这样:

Group Title 1 中的 Item Titile 2的项被删除掉了以后,后面的元素都向前移动了,证明VariableSizedWrapGrid控件内部对Visibility变化导致的布局变化的支持度不是很好。(你注意到在ItemTitile2项被隐藏后,为什么中间的空间会比较大,不像其他元素一样?  这个留给大家去研究吧,卖个关子。。。)

 

关键因素2:WrapGrid

或许你的应用中不需要分组,也会出现类似的情况,那可能是这样的:

<GridView
x:Name="itemGridView"
AutomationProperties.AutomationId="ItemGridView"
AutomationProperties.Name="Grouped Items"
Grid.RowSpan="2"
Padding="116,137,40,46"
ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"
ItemTemplate="{StaticResource Standard250x250ItemTemplate}"
SelectionMode="None"
IsSwipeEnabled="false"
IsItemClickEnabled="True"
ItemClick="ItemView_ItemClick">

<GridView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Vertical"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>

 

同样的,隐藏某一项后,后面的元素并不会填充被隐藏元素的空间,而只是隐藏了那一项,剩下的位置不动。。。

那你试试把WrapGrid换成 VirtualizingStackPanel,问题解决了。

你或许在问,如果这样改,空白的空间是解决了,但是我们的整体布局也被打乱了。。。

 

没错,其实这些都只是下下策,更多的是为了告诉大家,这几个控件对Visibility属性变化而引起的布局变化的支持程度,而相比较之下,或许从数据源中删除数据才是更好的解决方案,即解决了空白空间的问题,也解决了布局被打乱的问题。

本文链接


    
最新技术文章:
 




特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3