我正在尝试访问一个值,该值应该在XAML和代码隐藏文件之间共享。因此我认为我可以使用x:static
markup extension。这是我的代码:
DetailPage.xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:AppName.Pages.DetailPage;assembly=AppName"
x:Class="AppName.Pages.DetailPage">
<Grid x:Name="masterGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{x:Static local:DetailPage.Width}" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- ... -->
</Grid>
</ContenPage>
DetailPage.xaml.cs
namespace AppName.Pages
{
public partial class DetailPage : ContentPage
{
public static readonly double Width = 40;
// ...
}
}
如果我启动应用程序,我会
System.Reflection.TargetInvocationException:调用目标抛出了异常。
如果我删除x:static
标记扩展名,那么页面工作正常。我试过不同的命名空间,但我没有成功。
解决方案:
在Karel Tamayo的帮助下,我得到了它的工作:
DetailPage.xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:AppName.Pages;assembly=AppName"
x:Class="AppName.Pages.DetailPage">
<Grid x:Name="masterGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{x:Static local:DetailPage.Width}" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- ... -->
</Grid>
</ContenPage>
DetailPage.xaml.cs
namespace AppName.Pages
{
public partial class DetailPage : ContentPage
{
public static readonly GridLength Width = new GridLength(40, GridUnitType.Absolute);
// ...
}
}
正如人们可以从命名空间中看到的那样,DetailPage
位于Pages
文件夹中。
答案 0 :(得分:3)
当您指定GridLength
值时,Width属性需要一个double
类型的对象。
在DetailPage.xaml.cs中尝试此操作:
public static readonly GridLength Width = new GridLength(40, GridUnitType.Pixel);
再次测试您的应用。
您可以根据需要将设备配置为GridUnitType.Pixel
,GridUnitType.Star
或GridUnitType.Auto
。