对于UWP我需要用于列的在Grid
宽度不同的大小。此外,该值应该是在平板电脑和智能手机上的不同。
下面的代码崩溃的应用程序
<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
。所以我不能使用额外的ResourceDictionary
也OnSizeAllocated()
不可在代码隐藏文件。
是否有可能使用OnIdiom
和OnPlatform
在一起吗?
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>
更漂亮的语法Xamarin.Forms V3.2(通过新的内置XAML扩展):
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{OnIdiom
Phone= {OnPlatform iOS=*, Android=*, UWP=100 },
Tablet= {OnPlatform iOS=*, Android=*, UWP=200 }}">
</ColumnDefinition>
</Grid.ColumnDefinitions>
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>
这在代码工作的一个选择是使用
if(Device.OS == TargetPlatform.Windows && Device.Idiom == TargetIdiom.Phone)
this.innerGrid.ColumnDefinitions.First().Width = new GridLength(100);
覆盖现有的XAML定义。 innerGrid
是在XAML中使用的Grid
的名称。