如何将静态类属性绑定到XAML / Xamarin中的UI组件

时间:2018-07-04 11:32:30

标签: c# wpf xaml xamarin.forms

我需要专家的帮助。我正在编写Xamarin应用程序。我无法将C#用户定义的静态Class属性(Colors.BackgroundColor)的静态属性绑定到XAML。实际上,我需要通过在静态类中定义的静态值来设置网格颜色的背景。但这总是给我在线上找不到类的错误

我在xmlns中找不到类型为 UserInterfaceDefinitions 的错误

BackgroundColor =“ {绑定源= {x:静态Circassia.Mobile:UserInterfaceDefinitions.Colors}}” 静态类代码

df = df[(df[cols] == min_val).sum(axis=1) >=2]
print (df)
    ID Sample1 quality1 Sample2 quality2 Sample3 quality3
1  ID2     val     str4     val     str4     val     str4
4  ID5     val     str4     val     str4     val     str4

XAML代码

namespace MyNamespace.Mobile
{
    public static class UserInterfaceDefinitions
    {
        public static class Colors
        {
            public static string BackgroundColor = "#DCECE";
        }


    }
}

.cs后面的代码

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
              xmlns:buttons="clr-namespace:MyNamespace.Mobile.UI.Buttons" 
              xmlns:Status="clr-namespace:MyNamespace.Mobile.UI.StatusDetails"     
             x:Class="MyNamespace.Mobile.UI.TestAndDemoSelection">
    <ContentPage.Content  Margin="0,0,0,0" BackgroundColor="White">


 <Grid x:Name="ChildGrid" Grid.Row="1" Grid.Column="0"  ColumnSpacing="10" BackgroundColor="White" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"></ColumnDefinition> 
                </Grid.ColumnDefinitions>

            <!-- I am getting the error as Type UserInterfaceDefinitions not found in xmlns-->

            <BoxView Grid.Column="0" BackgroundColor = "{Binding Source = {x:Static MyNamespace.Mobile:UserInterfaceDefinitions.Colors} }" /> 

 </Grid>     

    </ContentPage.Content>
</ContentPage>

如何将静态类属性绑定到XAML?

致谢

Susheel

3 个答案:

答案 0 :(得分:0)

为了绑定静态属性:

1)声明要使用xmlns导入的名称空间

2)在Source中相应地使用xmlns

=>

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
              xmlns:buttons="clr-namespace:MyNamespace.Mobile.UI.Buttons" 
              xmlns:Status="clr-namespace:MyNamespace.Mobile.UI.StatusDetails" 
             xmnlns:local="clr-namespace:MyNamespace.Mobile" 
             x:Class="MyNamespace.Mobile.UI.TestAndDemoSelection">
    <ContentPage.Content  Margin="0,0,0,0" BackgroundColor="White">


         <Grid x:Name="ChildGrid" Grid.Row="1" Grid.Column="0"  ColumnSpacing="10" BackgroundColor="White" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"></ColumnDefinition> 
                </Grid.ColumnDefinitions>


            <BoxView Grid.Column="0" BackgroundColor = "{x:Static local:UserInterfaceDefinitions.Colors.BackgroundColor}" /> 

         </Grid>     

    </ContentPage.Content>
</ContentPage>

此外,BackgroundColor应该是可访问的属性:

public static string BackgroundColor {get;} = "#DCECE";

答案 1 :(得分:0)

我有解决方案。这是因为在XAML中无法访问嵌套静态类,因此正确的代码如下。

用户定义的静态类:

namespace MyNamespace.Mobile
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public static class UserInterfaceDefinitions
    {
        public static string BackgroundColor { get; } = "#DCECEC";
    }
}

XAML文件:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
              xmlns:local="clr-namespace:MyNamespace.Mobile"   
             x:Class="MyNamespace.Mobile.UI.TestAndDemoSelection">
    <ContentPage.Content  Margin="0,0,0,0" BackgroundColor="White">


 <Grid x:Name="ChildGrid" Grid.Row="1" Grid.Column="0"  ColumnSpacing="10" BackgroundColor="White" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"></ColumnDefinition> 
                </Grid.ColumnDefinitions>


           <BoxView Grid.Column="0" BackgroundColor = "{Binding Source = {x:Static local:UserInterfaceDefinitions.BackgroundColor}}" />

 </Grid>     

    </ContentPage.Content>
</ContentPage>

答案 2 :(得分:0)

XAML与嵌套类的配合非常差。 是的,一般来说,公共嵌套类通常是一种非常糟糕的技术。

示例:

namespace MyNamespace.Mobile
{
    public static class Colors
    {
        public static string BackgroundColor { get; } = "Red";
    }

}

XAML:

<StackPanel xmlns:Circassia.Mobile="clr-namespace:MyNamespace.Mobile"
    Background ="{Binding Source={x:Static Circassia.Mobile:Colors.BackgroundColor}}"/>

第二个示例:

namespace MyNamespace.Mobile
{
    public static class UserInterfaceDefinitions
    {
        public static ColorsClass  Colors{ get; } = new ColorsClass();

        public class ColorsClass
        {
            private static readonly string s_BackgroundColor = "Red";
            public static string BackgroundColor { get; } = s_BackgroundColor;
        }

    }
}

XAML:

<StackPanel xmlns:Circassia.Mobile="clr-namespace:MyNamespace.Mobile"
    Background ="{Binding BackgroundColor, Source={x:Static Circassia.Mobile:UserInterfaceDefinitions.Colors}}"/>