2012-01-18 90 views
1

我走了一段時間後,我用Expression Blend做了一個演示應用程序。如何使用Expression Blend動態添加/刪除控件?

我的第一個屏幕是按鈕的大選擇,所以當用戶點擊任何按鈕時,它會轉到MainView。

然後在MainView中,我有一個菜單項列表,用戶可以單擊並顯示其對應的DisplayView。 (Appointment Menu Item會顯示AppointmentView等)。

一切都很好,我可以點擊MenuItem,視圖顯示動畫和過渡效果。

但事情是,在Expression Blend中創建MainView,Menu,AppointmentView等等每一件事物都是在XAML中預定義的。所以當用戶加載第一個屏幕時必須將所有內容加載到內存中。

現在想起來了,不應該將MainView等動態添加到屏幕中嗎? 如何使用Expression Blend進行操作?或者唯一的辦法就是......在代碼背後自己做(寫StoryBoard等動態添加/刪除控件?)

如果有任何示例/教程做它,它會大。

回答

0

我想你有非常有限的可能性來有條件地加載或卸載Blend中的控件,而無需編寫代碼隱藏。

通常,XAML中的開始標記等同於某個類對象的無參數構造函數。只要你寫標籤,你正在實例化一個對象,但這並不意味着它的可視化外觀被加載到內存中。只有當控件實際顯示在屏幕上時纔會發生這種情況。

在我看來,控制某些控件外觀的最簡單的方法是使用單個子控件。以一個邊界控件爲例,並添加您想要有條件加載到其子屬性的用戶控件,以便決定是否加載或卸載控件。

但不幸的是我認爲你必須在代碼中做到這一點。拿這個簡單的代碼片段:

// either instantiate in code or use from markuup 
Border myBorder = new Border(); 

// the control you want to conditionally appear and disappear 
UserControl myUserControl = new UserControl(); 
myBorder.Child.Add(myUserControl); 

當然,更復雜的方法是使用網格。在這裏,你必須使用附加屬性來添加或刪除的子元素:

// either instantiate in code or use from markuup 
Grid myGrid = new Grid(); 

// the control you want to conditionally appear and disappear 
UserControl myUserControl = new UserControl(); 

// set the target position inside the Grid via the Grids attached properties 
Grid.setRow(myUserControl, 1); 
Grid.setColumn(myUserControl, 0); 

// actually add the control 
Grid.Children.Add(myUserControl); 

雖然我敢肯定你們都知道了這一切,我希望它有助於一點:)