2012-08-06 46 views
1

幾個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,這已經損害了我們的生產力,並且可能會變得更糟。

有其他人遇到過類似的問題,存在什麼樣的解決方案或解決方法?

回答

1

根據我的經驗和我的觀點,解決此問題的方法是將IDE設置爲「在XAML視圖中打開XAML文件」。

換句話說,不使用設計。

如果你需要'使用設計再打開混合,繪製圖案,然後將它們集成到應用程序。您可以單獨查看每個視圖。您只需要在正在運行的應用程序的上下文中查看合併佈局。與我合作過的最有生產力的WPF和Silverlight開發人員使用這種方法。

+0

這就是我們大多數人一直在做的事情。無論如何,我們不得不因爲VS2010和VS2012下的XAML設計者非常不穩定,因此對於大型項目來說,必須禁用它才能保持VS運行。無法查看正在運行的應用程序以外的任何其他用戶界面,但這與WPF本來應該提供的完全相反。 – Neutrino 2013-10-06 11:36:56

+0

情況並非如此 - 你可以*在Blend中查看它,而不是在VS中。 – 2013-10-07 14:00:03