天天看點

建立自定義行為并在Silverlight項目中使用

我們可以編寫代碼來建立自己定義的行為(Behavior)并在Expression Blend中調用自定義的行為。

我們需要從Behavior類繼承,最簡單的自定義行為的代碼如下:

<a href="http://blog.51cto.com/attachment/201105/172014790.jpg" target="_blank"></a>

DependencyObject 為依賴屬性,比如可以為TextBox,然後重寫基類的兩個方法OnAttached() 和OnDetaching() 。

我們也可以在行為中包含指令。

 允許使用者自定義行為功能的一種方式是公開 Commands (類型為 ICommand 的任何屬性),其中每個指令都對應于 Behavior 可執行的一項操作。首先,請確定項目同時引用了 Microsoft.Expression.Interactions 和 System.Windows.Interactivity DLL。

修改上面的代碼,如下

<a href="http://blog.51cto.com/attachment/201105/172116729.jpg" target="_blank"></a>

下面是MSDN描述Commands和Behaviors是如何協同工作的

<a href="http://blog.51cto.com/attachment/201105/172141482.png" target="_blank"></a>

下面我們以一個具體的Demo來建立自己的自定義行為。

建立Silverlight應用程式,命名為MyBehavior,

<a href="http://blog.51cto.com/attachment/201105/172234387.jpg" target="_blank"></a>

在編寫Behavior之前,先要添加Interactivity的引用

<a href="http://blog.51cto.com/attachment/201105/172312351.jpg" target="_blank"></a>

然後我們重新OnAttached()和OnDetaching()方法

<a href="http://blog.51cto.com/attachment/201105/172336678.jpg" target="_blank"></a>

輸入AssociatedObject,即與行為相關的對象,他有一些屬性、事件

<a href="http://blog.51cto.com/attachment/201105/172401275.jpg" target="_blank"></a>

我們這裡寫一些字段,如下圖:

<a href="http://blog.51cto.com/attachment/201105/172432410.jpg" target="_blank"></a>

然後編寫OnAttached事件,注冊了keydown、GotFocus和LostFocus事件

<a href="http://blog.51cto.com/attachment/201105/172458289.jpg" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201105/172522170.jpg" target="_blank"></a>

然後我們就可以在我們的SL應用程式中調用剛剛建立的行為了。

首先需要在XAML代碼中添加因為,如下圖

<a href="http://blog.51cto.com/attachment/201105/172553452.jpg" target="_blank"></a>

其他的XAML代碼如下:

<a href="http://blog.51cto.com/attachment/201105/172613974.jpg" target="_blank"></a>

最後,運作程式,效果如下 

代碼下載下傳:

<a target="_blank" href="http://blog.51cto.com/attachment/201105/2621421_1306402023.rar"></a>

<a href="http://down.51cto.com/data/2358235" target="_blank">附件:http://down.51cto.com/data/2358235</a>

    本文轉自xshf12345 51CTO部落格,原文連結:http://blog.51cto.com/alexis/574824,如需轉載請自行聯系原作者

繼續閱讀