2016-09-15 13 views
0

XAMLとコードビハインドファイルの間で共有される値にアクセスしようとしています。だから私はx:static markup extensionを使うことができると思った。私はアプリを起動した場合、私はXAMLとコードビハインドファイルからのアクセス値

System.Reflection.TargetInvocationExceptionを取得

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; 
     // ... 
    } 
} 

:これは私のコードです:呼び出しの対象によって例外がスローされました。

マークアップ拡張子x:staticを削除すると、ページは正常に動作します。私は別の名前空間で試しましたが、成功しませんでした。

ソリューション:

Karel Tamayoの助けを借りて、私はそれが働いて得た:1として

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というフォルダにあります。

答えて

3

doubleの値を割り当てているときに、WidthプロパティにはGridLengthの1つのオブジェクトが必要です。

public static readonly GridLength Width = new GridLength(40, GridUnitType.Pixel); 

をそして再びあなたのアプリをテストします。

あなたDetailPage.xaml.csでこれを試してみてください。 必要に応じて、ユニットをGridUnitType.Pixel,GridUnitType.StarまたはGridUnitType.Autoに設定できます。

+0

あなたは正しいですか? ['ColumnDefinition'](https://developer.xamarin.com/api/type/Xamarin.Forms.ColumnDefinition/)は、' 'GridLength'(https://developer.xamarin.com/api/type/Xamarin)をとります。 Forms.GridLength /)を「幅」として設定します。 'Absolute'、' Auto'、 'Star'は' GridUnitType'で利用できます。今私は 'public static readonly GridLength Width = new GridLength(40、GridUnitType.Absolute);'を試みましたが、 'TargetInvocationException'を取得しました。まだまだ何かが欠けているようです... – testing

+0

OK、今私はそれを得ました。最終的な解決策を投稿するために質問を編集します。ご協力いただきありがとうございます :-) – testing

関連する問題