0

XAML:

<Rectangle Fill="{Binding Gray}" />

C#:

public class colors
{
    public string Gray
    {
        set {}
        get{ return "#FF22262a";}
    }
}

コンパイルしてもエラーになりません。しかし、長方形は「#FF22262a」を埋めません

編集: このコードも機能しません:
MainPage.xaml

<TextBlock Text="{Binding MyGray2}"></TextBlock>

MainPage.xaml.cs

public String MyGray2
{
    set { }
    get { return "gjnuegheugheog"; }
}

EDIT2:

<phone:PhoneApplicationPage 
    x:Class="FlagLib.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:vm="clr-namespace:FlagLib"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">
    <phone:PhoneApplicationPage.Resources>
            <vm:colors x:Key="vmColors"  />
...
    </phone:PhoneApplicationPage.Resources>
...
            <Grid Grid.Column="0" Tap="onToggleHorizontal" DataContext="{StaticResource vmColors}">
                <Rectangle Fill="{Binding Gray}" />
...

EDIT3:
MainPage.xaml:

<phone:PhoneApplicationPage
    x:Class="proba5.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:vm="clr-namespace:proba5" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <phone:PhoneApplicationPage.Resources>
        <vm:colors x:Key="vmColors"/>
    </phone:PhoneApplicationPage.Resources>


    <Grid x:Name="LayoutRoot" Background="Transparent">


        <Grid DataContext="{StaticResource vmColors}">
            <Rectangle Fill="{Binding Gray}" />
        </Grid>
    </Grid>

</phone:PhoneApplicationPage>

色.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace proba5
{
    public class colors
    {
        public string Gray
        {
            set { }
            get { return "#FF22262a"; }
        }
    }
}

取得した理由 名前「colors」は名前空間「clr-namespace:proba5」に存在しません。

4

2 に答える 2

2

を設定する必要がありますDataContext

public MyPage()
{
   DataContext = new colors();
}

私は XAML でそれを行うことを好みます。

上部に名前空間をインポートします

xmlns:vm="clr-namespace:MyNamespace"

クラスをリソースとして追加します (必要に応じて、アプリ レベルでこれを行うことができます)。

<phone:PhoneApplicationPage.Resources>
    <vm:colors x:Key="vmColors"  />
</phone:PhoneApplicationPage.Resources>

DataContext に割り当てます (この場合、グリッドに割り当てたので、vmColors特定の子コントロールに対して変更しない限り、グリッド内のすべてのコントロールが DataContext を想定します)。

<Grid DataContext="{StaticResource vmColors}">
   <Rectangle Fill="{Binding Gray}" />
</Grid>

コードがどこにあるかを確認できるように、ページの完全な XAML を次に示します。

<phone:PhoneApplicationPage
    x:Class="MyClass.MyPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:vm="clr-namespace:MyNamespace" // << IMPORT NAMESPACE
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d">


    //ALLOW THE CLASS TO BE ACCESSED VIA STATICRESOURCE
    <phone:PhoneApplicationPage.Resources>
        <vm:colors x:Key="vmColors"/> 
    </phone:PhoneApplicationPage.Resources>


    <Grid x:Name="LayoutRoot" Background="Transparent">      

        //SET THE DATACONTEXT OF THE GRID TO THE COLORS CLASS
        <Grid DataContext="{StaticResource vmColors}">
            <Rectangle Fill="{Binding Gray}" />
        </Grid>
    </Grid>

</phone:PhoneApplicationPage>
于 2013-08-22T08:10:09.723 に答える
0

そんなことはできません。あなたがしようとしているのは、 astringを a に暗黙的にキャストすることですColorが、これは不可能です。このコードを検討する必要があります:

public SolidColorBrush MyGray
{
    set { }
    get { return new SolidColorBrush(Color.FromArgb(172, 172, 172, 0)); }
}

ここに私のソースがあります: http://msdn.microsoft.com/fr-fr/library/system.windows.shapes.shape.fill.aspx

XAML で色を管理する方法は他にもあります。詳細については、msdn を参照してください。

編集:コンパイル時にエラーがないのは正常です。XAML は実行時に解釈されます。

編集 2:コードを更新します。

于 2013-08-22T07:39:23.593 に答える