2016-02-06 16 views
1

我正在使用Xamarin平台构建一个移动应用程序。在解决方案中,有一个core项目,然后是平台特定项目,在这种情况下为.ios.android。在我的核心项目中,我有一个带按钮元素的XAML布局。 My_App.Core.HomePage.xaml在xaml和c中创建一个按钮“public”#

<Button x:Name="LoginIcon" 
     Image="key.png" 
     HorizontalOptions="Center" 
     VerticalOptions="CenterAndExpand" 
     Grid.Row="9" Grid.Column="3" Grid.ColumnSpan="3" /> 

我对这些项目的一些平台特定的逻辑,这样的结果我想改变这些按钮的来源。例如

My_App.ios.customfile.cs:

My_App.HomePage.LoginIcon.Source = ImageSource.FromFile("bluetoothg.png"); 
当然

,作为按钮在XAML定义,LoginIcon是不可见的,从这个文件,我怎样才能使这个XAML元素public,所以我可以参考引用核心文件的解决方案中的其他项目?

+0

我不是XAML的专家,但我相信MVVM方法可以提供这些功能。我不太清楚它是如何工作的,但它从实际的逻辑中抽象出控制的功能,从而实现可扩展性。 –

+0

如果您尝试访问MV *模式中的GUI控件,则您正在做错事 – Tinwor

+0

MV风格的整点不是通过抽象的可扩展模型来访问GUI控件吗? –

回答

1

创建你的页面上的属性和返回按钮:

public Button PubLoginIcon{ get{ return LoginIcon; } } 

,但我必须说的东西是错误的设计,如果你要访问其他页面上的控件,更好的方法是有功能的该页面作为公共功能,在这种情况下,您无需访问控件。

+1

原因是,所有的UI东西都是在核心项目中定义的。蓝牙处理平台特定的代码。我想更改图片以显示设备连接时与未连接时的情况。因此需要从平台代码改变UI元素。还有另一种方法可以做到吗? –

+1

是的,只需在集合存储中创建一个名为Connected的公共布尔属性布尔值,如果它是true,则设置连接的图像,否则设置未连接的图像,这样您也可以使用一个很好的属性来检查显示哪个状态(只需返回get上的布尔值) – Gusman