3

对于UWP,我需要在Grid中的列宽度不同的大小。此外,平板电脑和智能手机的价值应该不同。是否可以在XAML(Xamarin.Forms)中混合使用OnIdiom和OnPlatform?

下面的代码崩溃该应用

<ColumnDefinition> 
    <ColumnDefinition.Width> 
     <OnIdiom.Phone> 
      <OnPlatform x:TypeArguments="GridLength" iOS="*" Android="*" WinPhone="100" /> 
     </OnIdiom.Phone> 
     <OnIdiom.Tablet> 
      <OnPlatform x:TypeArguments="GridLength" iOS="*" Android="*" WinPhone="200" /> 
     </OnIdiom.Tablet> 
    </ColumnDefinition.Width> 
</ColumnDefinition> 

类型OnIdiom.Phone中的xmlns http://xamarin.com/schemas/2014/forms

该代码是在ViewCell未找到。所以我不能使用额外的ResourceDictionaryOnSizeAllocated()在代码隐藏文件中不可用。

是否可以同时使用OnIdiomOnPlatform?这在代码工作

回答

9

OnIdiom,就像OnPlatform是你要申报对象。在你的情况下,你将OnIdiom.Phone属性设置为没有这些属性的对象。

XAML中应该更像:

<ColumnDefinition> 
    <ColumnDefinition.Width> 
    <OnIdiom x:TypeArguments="GridLength"> 
     <OnIdiom.Phone> 
     <OnPlatform x:TypeArguments="GridLength" iOS="*" Android="*" WinPhone="100" /> 
     </OnIdiom.Phone> 
     <OnIdiom.Tablet> 
     <OnPlatform x:TypeArguments="GridLength" iOS="*" Android="*" WinPhone="200" /> 
     </OnIdiom.Tablet> 
    </OnIdiom> 
    </ColumnDefinition.Width> 
</ColumnDefinition> 
+0

我试图在本地机器上运行应用程序。这里200宽度不被尊重。它不应该落入“平板电脑”类别吗? – testing

+0

'Device.OS'是'Windows','Device.Idiom'是'Desktop'。 XAML中是否有可用的定义? 'WinPhone'之前工作正常。 – testing

+1

支持OnIdiom中的'Desktop'几天前登陆https://github.com/xamarin/Xamarin.Forms/pull/420。该修补程序将出现在即将到来的2.3.4-pre1中 –

0

一种选择是使用

if(Device.OS == TargetPlatform.Windows && Device.Idiom == TargetIdiom.Phone) 
    this.innerGrid.ColumnDefinitions.First().Width = new GridLength(100); 

覆盖现有的XAML定义。 innerGrid是Xaml中使用的Grid的名称。

1

Xamarin.Forms的XAML示例:

<OnPlatform x:TypeArguments="View"> 
    <OnPlatform.Android> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition> 
        <ColumnDefinition.Width> 
         <OnIdiom x:TypeArguments="GridLength" Tablet="100" Phone="50" /> 
        </ColumnDefinition.Width> 
       </ColumnDefinition> 
       <ColumnDefinition> 
        <ColumnDefinition.Width> 
         <OnIdiom x:TypeArguments="GridLength" Tablet="100" Phone="50" /> 
        </ColumnDefinition.Width> 
       </ColumnDefinition> 
      </Grid.ColumnDefinitions> 
     </Grid> 
    </OnPlatform.Android> 
    <OnPlatform.iOS> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition> 
        <ColumnDefinition.Width> 
         <OnIdiom x:TypeArguments="GridLength" Tablet="100" Phone="50" /> 
        </ColumnDefinition.Width> 
       </ColumnDefinition> 
       <ColumnDefinition> 
        <ColumnDefinition.Width> 
         <OnIdiom x:TypeArguments="GridLength" Tablet="100" Phone="50" /> 
        </ColumnDefinition.Width> 
       </ColumnDefinition> 
      </Grid.ColumnDefinitions> 
     </Grid> 
    </OnPlatform.iOS> 
</OnPlatform> 
+0

OK,我乘完整'Grid'定义。但是我有几个名为'Label'的标签,并且不能有多个同名的标签。任何解决方案? – testing

相关问题