2014-09-02 48 views
0

是否可以爲WPF窗口創建多個佈局?WPF中的多個佈局

也就是說,我有一個應用程序可以運行在平板電腦或更傳統的臺式機或筆記本電腦上。該表可以具有比筆記本電腦或臺式機高得多的屏幕分辨率,但是由於較小的物理屏幕尺寸,最好在平板電腦上以不同方式佈置控件。

如果這是可能的,你是如何做到的?

回答

0

有很多不同的方法,每種方法都可能根據您的需要有不同的優勢。

  • 具有不同的默認值,條件編譯,與項目風格/模板,尋找那些財產

    附加屬性

  • 值轉換器,是以平臺考慮其輸出

  • 以代碼加載的多個XAMLs

  • 完全不同的平臺頁面,可重複使用跨平臺內部的控件

  • 執行相當於Xamarin的OnIdiom,這可能是最好的方法。我補充我自己的實現與OnIdiomExtension:IMarkupExtension所以我可以在裏面的屬性使用它,而無需破解出來作爲單獨的元件

我敢肯定列表可以去上,總有10種做同樣的事情在WPF - 9錯誤,1個右和1個無證這通常是最好的:)


編輯:OnIdiom詳情

本質OnIdiom一個通用的構造,挑選3個要素之一 - OnTablet,OnPhone和OnDesktop - 每個通用的類型。您也可以選擇退出的,只是使用的UIElement其元素

這裏有幾個例子它是如何在XAML

<RowDefinition.Height> 
    <OnIdiom x:TypeArguments="GridLength" Phone="1.25*" Tablet="1.35*" /> 
</RowDefinition.Height> 


<OnIdiom x:TypeArguments="View"> 
    <OnIdiom.Phone> 
    <local:BuildingAreasView/> 
    </OnIdiom.Phone> 
    <OnIdiom.Tablet> 
    <Grid x:Name="gridRoot">....</Grid> 
    </OnIdiom.Tablet> 
</OnIdiom> 

使用和XAML使用的標記擴展非泛型版本:

下面是OnIdiomExtension.cs一些示例代碼,顯然缺少了簡潔的平板電腦和臺式機性能

[ContentProperty ("Default")] 
public class OnIdiomExtension : IMarkupExtension 
{ 
    public object Default { get; set; } 

    public object Phone { get; set; } 

    public object ProvideValue (IServiceProvider serviceProvider) 
    { 
     object val = Default; 

     switch (Device.Idiom) { 
     case TargetIdiom.Phone: 
      val = Phone ?? Default; 
      break; 
     } 

     return val; 
    } 
} 
+0

我從來沒有見過Xamarin的東西,因爲我沒有做iOS編程。你有任何關於它的使用的例子的鏈接?該文檔沒有說明什麼來解釋如何使用它。 – 2014-09-02 14:05:54

+0

看到更新,你應該能夠實現代碼隱藏在OnIdiom – 2014-09-02 14:31:22

+0

好吧,我看到它是如何工作的,但我確實有一個問題。在你給出的'IMarkUpExtension'實現中,'Device'對象來自哪裏? – 2014-09-02 19:58:07