天天看點

C#學習☞WPF的一個有趣試驗

學習C#.net有兩三個星期了, 怎奈書本略厚, 工作略繁雜, 于是各種跳章, 好不容易跳到了WPF的章節.

看了<<C#與.NET4進階程式設計>>第27章, 就突然産生了一個想法.

總覺得WPF是在跟網頁制作較勁, 網頁的HTML标簽一行一行加載下來, 如果有一行button加載完了, 下面可以寫一個js标簽, 顯示地執行一段函數.

于是我想XAML是不是也能這樣呢?

比如, 在一個Button加載完之後執行一條語句, 跳一個MessageBox什麼的? 可貌似, 在XAML中不能顯式調用函數...

正所謂初生牛犢不怕虎, 于是我這樣做:

1, 首先建立一個能在XAML中寫的标簽, 為了造成一層輕薄的假象, 這個标簽就叫做Script好了~ Script标簽下的隻能調用函數...怎麼調用呢? 于是我想到用屬性調用. 這個屬性擁有函數般的名字, 而它的value其實隻是函數的參數...

真正殘念

public class Script:UIElement
    {
        public string ShowMessage
        {
            set
            {
                MessageBox.Show(value.ToString());
            }
        }
    }      

2, 在XAML中添加命名空間, 在這裡我還算是老實地帶上了local的字首...

<Window x:Class="WpfTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfTest"
        Title="MainWindow" Height="350" Width="525">      

3, 在window的内容布局控件中随便加點Button什麼的, 然後把Script放在後面, 比如這樣

<StackPanel>
        <Button>1231231231</Button>
        <Button>1231231231</Button>
        <Button>1231231231</Button>
        <Button>1231231231</Button>
        <Button>1231231231</Button>
        <local:Script ShowMessage="haha" />
    </StackPanel>      

4, 運作...

果然, 在Button add到StackPanel的Children中之後, 執行個體化Script并對這個帶有函數般名字的屬性ShowMessage設定的時候, MessageBox出現了.

實驗到此結束, 當然這個實驗幾乎沒有任何意義. 不過本人算是心滿意足地在XAML中顯示調用了函數.

然後, 這個時候, 對于習慣了C/C++編譯後運作的我來說, 有趣的事情發生了.

各位可以試着随意更改Script标簽上面的按鈕, 比如添加一個Button或是删除一個Button什麼的, 随着設計器的重新整理, MessageBox.Show(value.ToString())也将又一次地被執行到.

哈哈, 少見多怪了. 但的确很有趣不是嗎?

繼續閱讀