tonyqus.cn

2008貌似是个灾年
随笔 - 201, 文章 - 1, 评论 - 1191, 引用 - 56
数据加载中……

2008年4月6日

如何隐藏UpdatePanel

一些人看了文章标题的第一反应也许是——这点破东西需要写篇文章吗? 直接UpdatePanel.Visible=false不就行了(俗话说:用屁股想想都知道,呵呵~~),我今天在实现这段代码时也是这么想的,没想到竟然报错了,UpdatePanel也没有隐藏掉。回过头来一捉摸,之所以没有效果的原因其实也不难解释,我们使用UpdatePanel的原因就是为了实现局部刷新,每一次刷新都是把UpdatePanel作为容器,既然是容器,它本身是不能动的,而让UpdatePanel不可见的另一种说法就是让UpdatePanel所生成的div从DOM中消失,既然刷新的容器都消失了,靠什么作刷新,简直就是在作白日梦~。

客户端解决方法
于是去MSDN论坛上搜了一把,确实有好几个贴子问到这个问题,但看到的回答基本都是加一段javascript,把UpdatePanel生成的div的display设置为none,这的确是一种可行的解决方式,但这种方式会造成服务器端和客户端的控件状态不统一(除非你打算自己写一段JavaScript代码更新服务器的状态),一旦作了full postback,用户有可能再次看到这个UpdatePanel。更何况,这样的隐藏代码通常要执行一些服务器端判断逻辑,都在客户端做恐怕达不到预期的效果。

提示
在ASP.NET中如果控件的Visible=false,整个控件就不会被呈现出来,即不会有任何的HTML元素(如span、div、a等)。

服务器端解决方法
首先想到的是UpdatePanel套Panel,既然没有办法自己刷新自己,那就让父UpdatePanel来刷新子Panel,从技术上讲这当然是可行的,但要注意一点,Panel所生成的div中不能有任何元素,且UpdatePanel不能设置宽度和高度。这是因为div默认情况下display为block,但如果没有宽度和高度,它就不会占据任何空间,否则就会充当占位符的角色。一旦把子Panel的Visible变成false,UpdatePanel及其子元素生成的代码如下所示:
<div id="UpdatePanel1"></div>

这就是我们需要的解决方法!

posted @ 2008-04-22 10:08 Tony Qu 阅读(328) | 评论 (1)编辑

Silverlight 2.0 通过OpenFileDialog动态加载本地图像文件

尽管Silverlight官方网站上都明确指出:出于安全原因,Silverlight不能访问本地文件系统。但是在Silverlight 2.0中有一个例外,就能通过OpenFileDialog来访问本地文件。

代码如下:

public void Button1_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog ofd = new OpenFileDialog();
    ofd.Filter = "JPEG Files (*.jpg;*.jpeg)|*.jpg;*.jpeg | All Files (*.*)|*.*";
    ofd.FilterIndex = 1;

    if (ofd.ShowDialog() == DialogResult.OK)
    {
        Stream stream = ofd.SelectedFile.OpenRead();
        BitmapImage bi = new BitmapImage();

        bi.SetSource(stream);
        Image img = new Image();
        img.Source = bi;
        bd.Child = img;

        stream.Close();
    }

}

其中,bd是一个Border控件,Button1_Click是一个按钮的Click事件处理程序。

使用起来和WinForm的OpenFileDialog差不多,这里就不详细讲解了。但要指出的一点是,根据Jeff Prosise的博客上的说法,这里我们本可以不用Border控件,而直接使用Image控件来实现,但是实验后发现,如果Image不动态添加,无法正确显示图像文件,不知道是不是Silverlight2的Bug,也有可能是我哪里没有设置正确,如果哪位兄弟觉得可以实现,请联系我。

演示代码下载地址为http://www.cnblogs.com/Files/tonyqus/Silverlight2OpenFileDialog.rar

posted @ 2008-04-08 09:43 Tony Qu 阅读(358) | 评论 (1)编辑

Silverlight 2.0 命中测试(HitTest)

对于某个对象的点击事件,我们可以通过Click、MouseLeftButtonUp、MouseLeftButtonDown来捕获,但是如果有几十个、甚至几百个这样的对象需要判断是否被点击,可能你就会觉得很不爽,因为你要添加同样数量的Button_Click或者MouseDown、MouseUp事件处理程序,更不用说有控件重叠的情况了(两个控件甚至有可能重合)。

Silverlight 2.0在这方面做了改进,引入了WPF的HitTest方法。使用起来还是比较简单的。例如,我们有一个Canvas叫做LayoutRoot(Canvas根元素),那么我们就可以使用下面的代码:

IEnumerable<UIElement> elements=LayoutRoot.HitTest(mousePt);

foreach(UIElement element in elements)
{

FrameworkElement fe=element as FrameworkElement;

...

}

这里的mousePt为鼠标的当前坐标,我想明眼人已经看出来了,这段代码是写在MouseDown或者MouseUp事件处理程序中的,你可以把它直接写在Root Canvas的MouseDown或MouseUp事件中,这样可以保证能够捕获并判断所有的鼠标点击事件,当然如果有其他需求,可以单独写在某个特定的容器元素的MouseDown或MouseUp中。

为了方便大家更好的理解HitTest,我写了一个小的sample,只要你的鼠标点击位置处存在Rectangle,下面的TextBlock就会把相应的Rectangle的Name显示出来。该代码在VS2008和Expression Blend 2.5 march preview下编译通过。

下载地址为http://www.cnblogs.com/Files/tonyqus/Silverlight2HitTest.rar

posted @ 2008-04-07 11:20 Tony Qu 阅读(1754) | 评论 (9)编辑

搭建Silverlight2.0开发环境

Silverlight 2.0已经发布了一段时间,很多朋友也许还未开始编写Silverlight 2.0的代码,本文将协助你搭建一个可马上投入Silverlight 2开发工作的环境。

 

基本安装

logo

Silverlight 2.0

下载地址:http://www.microsoft.com/silverlight/resources/InstallationFiles.aspx?v=2.0

Microsoft Silverlight Tools Beta 1 for Visual Studio 2008
 http://www.microsoft.com/downloads/details.aspx?FamilyId=E0BAE58E-9C0B-4090-A1DB-F134D9F095FD&displaylang=en
(如果不安装该软件包,VS2008无法打开Silverlight 2.0的项目文件)

安装设计软件

expressionstudio2betanw5

Expression Studio 2 beta (内带Expression Blend、Expression Design、Expression Media、Expression Web)

下载地址:http://www.microsoft.com/expression/products/download.aspx?key=studio2beta

boxShot_Blend

Expression Blend 2.5 March Preview

下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=32A3E916-E681-4955-BC9F-CFBA49273C7C&displaylang=en 

 

安装开发软件

VSE_VS2008_Header

Visual Studio 2008 或Visual Studio 2008 Express

Visual Studio 2008 Express下载地址:http://www.microsoft.com/express/download/

 

FAQ

Q: 既然我有了Expression Studio 2,我还需要安装Visual Studio 2008吗?

A: Expression Studio主要由图形设计师和前台开发设计师使用进行图形设计和动画设计的,没有办法编写代码,所有项目中的.cs和.vb文件都是在Visual Studio 2008中进行编辑的。

Q: 既然ExpressionStudio 2中有Blend了,为啥我还要安装Blend 2.5?

A: 因为Expression Studio内带的Blend 2仅支持Silverlight 1.0的开发,不支持Silverlight 2.0(或者说没有内建的Silverlight 2.0模版),而2.5既支持Silverlight 1.0的开发,也支持Silverlight2.0的开发。

Q: Expression Studio的项目文件与Visual Studio的项目文件兼容吗?

A: 兼容,同一个项目既可以在Expression Studio中打开,也可以在Visual Studio中打开。

Q: 安装Expression Studio 2对机器配置有什么要求?

A: 参见http://www.microsoft.com/expression/products/SysReq.aspx?key=studio2beta

Q: 我的计算机是Apple Mac的,能否安装Expression Studio 2 beta?

A: 恐怕不行,因为只有Expression Media才支持Mac。

Q: 我可否不装Exression Studio 2 beta?

A: 可以,但是前提是你不准备使用Expression Design、Expression Media等软件作图形和视频编辑。目前除了Expression Blend有2.5预览版外,其他都是2.0版本。

 

如果你还有其他问题,请写在回帖中,我会及时更新!

posted @ 2008-04-06 20:43 Tony Qu 阅读(938) | 评论 (3)编辑