Silverlight//XAML物件的事件觸發 vs CS的函數

在Silverlight中,function和XAML的互動物件,似乎是沒有直接關係的,也就是說,如果你沒有依照下面這樣做,你的Silverlight就是一堆介面元件與function而已,它們互不認識唷。

Silverlight說方便是不方便,說難也不難。怎麼說呢?我們現在要講的,竟然有很多方式可以完成。在此講兩個方式,我覺得比較簡單,而且適用於不同取向的設計者。

第一種方式,適合給做視覺的網頁設計師。

*.XAML檔

在XAML,介面物件與物件的事件要觸發的function註冊在一起了。

    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel>
            <Button Name="cmdClickMe" Content="ClickMe!" Margin="5" Click="cmdClickMe_Click"/>
        </StackPanel>
    </Grid>

*.cs檔

在cs,只要對物件的行為做定義即可。不需也無法修改什麼物件要觸發什麼function。
namespace SilverlightApplication1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        int i = 0;
        private void cmdClickMe_Click(object sender, RoutedEventArgs e)
        {
            cmdClickMe.Content = "this is " + i++;
        }

    }
}

第二種方式,適合給做介面的程式設計師。


*.xaml檔

在XAML,只有定義介面的物件名稱。
    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel>
            <Button Name="cmdClickMe" Content="ClickMe!" Margin="5"/>
        </StackPanel>
    </Grid>

*.cs檔

在cs才定義該物件的行為,什麼事件會觸發什麼function
namespace SilverlightApplication1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            cmdClickMe.Click += cmdClickMe_Click;  //委派 XamlFunction = Csfunction

        }

        int i = 0;
        private void cmdClickMe_Click(object sender, RoutedEventArgs e)
        {
            cmdClickMe.Content = "this is " + i++;
        }

    }
}
我自己覺得第二種比較適合我,給大家參考看看。
個人的見解,寫下這一段之前,還沒有拜讀任何大師的作品,所以不要太相信呀。
因為,XAML與cs檔之間,畢竟還是有彈性上的差異。XAML上屬靜態定義,在CS上屬動態定義,善用程式碼做動態的變化,在頁面呈現給使用者看之後,還可以保留對介面物件的事件與CS函數的委派關係做修改的空間。

最後,兩個方法都使用會怎樣?
也就是,在XAML註冊了,也在CS中用了委派。那會執行兩次?還是視為一次執行?
試完的結果是,執行兩次。XDDD

沒有留言:

張貼留言

(什麼是留言欄訊息?)