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"; }
}

编辑2:

<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"; }
        }
    }
}

为什么我得到 命名空间“clr-namespace:proba5”中不存在名称“colors”。

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(在这种情况下,我已将其分配给 Grid,因此 Grid 中的任何控件都将采用vmColorsDataContext,除非您为该特定子控件更改它)。

<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

你不能那样做。您要尝试将 a 隐式string转换为 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 回答