幾個WPF控件沒有視覺表示,除非他們具有一定的數據(的ItemsControl例如)。因此,要在Visual Studio設計器中查看它們的佈局,您需要使用DesignData XAML擴展來爲它們填充可呈現的內容。這些控件的常見用法是定義幾個隱式類型的數據模板,以便控件可以顯示多種類型。樣本數據和隱式datatyped的DataTemplates
但是,在我看來,設計師很少或根本沒有支持這個最簡單的佈局,使得它對我們都沒有用處,但我希望我錯了,而我只是忽略了一些東西。下面是我看來的樣子(爲簡潔起見,省略了xmlns命名空間)。
<UserControl
d:DataContext="{d:DesignData Source=/CustomersDesignData.xaml}">
<Grid>
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"/>
<TextBlock></TextBlock>
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</ListBoxItem>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</UserControl>
以上的工作,設計師正確地顯示了樣本數據,使人們能夠驗證佈局。但是沒有隱式的數據分析,這種方法對於顯示多種類型沒有用處。
<UserControl
d:DataContext="{d:DesignData Source=/CustomersDesignData.xaml}">
<Grid>
<ItemsControl>
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type local:Customer}">
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"/>
<TextBlock></TextBlock>
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</ListBoxItem>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
</Grid>
</UserControl>
在運行時和附加隱含datatyped tempates細上述工作可以被添加使得能夠顯示多種類型的控制。雖然大猩猩大小的飛行是軟件設計師愚蠢地顯示原始的ToString()輸出,使得這種方法在開發UI時沒有用處。
而且似乎毫無任何區別,你定義模板,把它放在用戶控件或應用程序的資源,結果是一樣的,虛無縹緲。據我所知,沒有辦法在XAML中支持任何形式的條件編譯,並且類型的構造函數不是由設計人員運行,所以即使解決方案後面的代碼看起來也不太可能。
我們正處在一個項目移植是將需要我們設計約200 UI的一個相當大的數據應用程序的啓動,許多這些UI的都深埋在應用程序中。沒有任何方法能夠通過展示設計數據來開發這些UI,這已經損害了我們的生產力,並且可能會變得更糟。
有其他人遇到過類似的問題,存在什麼樣的解決方案或解決方法?
這就是我們大多數人一直在做的事情。無論如何,我們不得不因爲VS2010和VS2012下的XAML設計者非常不穩定,因此對於大型項目來說,必須禁用它才能保持VS運行。無法查看正在運行的應用程序以外的任何其他用戶界面,但這與WPF本來應該提供的完全相反。 – Neutrino 2013-10-06 11:36:56
情況並非如此 - 你可以*在Blend中查看它,而不是在VS中。 – 2013-10-07 14:00:03