已经有一些关于如何创建"自定义控件"的好例子 -
我想创建一个"复合自定义控件或用户控件 ",它包含在XAML中定义的多个元素(在共享代码中),然后使用渲染器进行自定义(比如调整每个平台的样式).
有没有人有这样做的例子呢?具有可绑定标签和输入框的视图的简单示例应足以显示主要原则.
这是我到目前为止 -
定义了一个ContentView来表示我们的用户控件布局和内容.
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="News.Forms.VisualNewsContentView">
<ContentView.Content>
<StackLayout>
<Label x:Name="MyLabel" Text="Label"></Label>
<Entry x:Name="MyEntry" Text="Entry"></Entry>
</StackLayout>
</ContentView.Content>
</ContentView>
Run Code Online (Sandbox Code Playgroud)
代码隐藏 -
public partial class VisualNewsContentView : ContentView
{
public VisualNewsContentView ()
{
InitializeComponent ();
}
// Not sure if I need this to access Entry ...
public Entry GetEntry ()
{
return MyEntry;
}
}
Run Code Online (Sandbox Code Playgroud)
为该ContentView添加Android自定义渲染器,如何访问和自定义ContentView的原生部件/控件?
[assembly:ExportRenderer (typeof(VisualNewsContentView), typeof(VisualNewsRenderer))]
namespace News.Forms.Android
{
public class VisualNewsRenderer: ViewRenderer
{
public VisualNewsRenderer () { } …Run Code Online (Sandbox Code Playgroud) 我在OS X上的Xamarin Studio中使用了可移植类库(PCL).我有两个PCL库,它们面向.NET 4.5,Windows Phone 8,Windows Store应用程序,Xamarin.iOS和Xamarin.Android.我在iOS,Android和Unit测试项目中引用了这两个库.我在3个区域收到以下错误:
"System.Object"类型在未引用的程序集中定义.您必须添加对程序集'System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用.
代码很简单:
MyClass myClass = new MyClass();
Run Code Online (Sandbox Code Playgroud)
在引用PCL的每个项目中都会发生一次错误.他们都不是同一个班级.我是PCL的新手.我已经尝试删除Windows Phone 8(因为我最后一分钟添加了它)但问题并没有消失.任何帮助都会被指定!
谢谢!
更新:
所以这发生在类中声明的第一个字段(其中类来自PCL项目).
int a = 0;
MyPCLClass _myPCLClass = new MyPCLClass(); //This is where the error appears
Run Code Online (Sandbox Code Playgroud)
另一个奇怪的方面是有超过50个类使用这些类,错误只出现在三个类中.
xamarin.ios xamarin.android portable-class-library .net-4.5 xamarin-studio
如果我试图在iOS 7的ViewDidAppear方法中显示阻止的AlertView,我将无法解除AlertView.没有触摸事件将到达AlertView.视图按钮将突出显示,但没有任何反应.如果我在iOS <7上运行相同的代码,它将正常工作.
这是示例代码:
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
var alert = new UIAlertView("Title", "Message", null, "OK");
alert.Dismissed += (sender, args) => result = true;
alert.Show();
while (!result)
NSRunLoop.Current.RunUntil(NSDate.FromTimeIntervalSinceNow(0.1));
}
Run Code Online (Sandbox Code Playgroud)
我正在使用带有Apple SDK 6.1的Xamarin.iOS版本6.4.3.0.我对alpha版的Xamarin.iOS 6.9.6.0和Apple SDK 7.0也有同样的问题.
有人能告诉我问题是什么吗?
感谢帮助.
与NSObject.FromObject相反的是,例如,从NSObject中取回常规C#对象.可以理解,这只适用于简单类型.
更新.假设我甚至知道类型 - 但不是在运行时之前.我试过了
Convert.ChangeType (value, info.PropertyType, null)
Run Code Online (Sandbox Code Playgroud)
但我得到一条消息"值不是一个可转换的对象:MonoMac.Foundation.NSString到System.String".
更新2. FromObject的工作原理:
using MonoMac.ObjCRuntime;
using System;
using System.Drawing;
public static NSObject FromObject (object obj)
{
NSObject result;
if (obj == null)
{
result = NSNull.Null;
}
else
{
Type type = obj.GetType ();
if (type == typeof(NSObject) || type.IsSubclassOf (typeof(NSObject)))
{
result = (NSObject)obj;
}
else
{
switch (Type.GetTypeCode (type))
{
case 3:
result = new NSNumber ((bool)obj);
return result;
case 4:
result = new NSNumber ((ushort)((char)obj));
return result;
case …Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的问题,如果有人能帮助我理解,我感激不尽.
接口C#可以有静态变量吗?
如果接口本身需要静态来声明里面的静态变量?
当我们在类中实现时,接口内的静态变量(或者说属性)的实现如何?
一些例子和明显的解释将不胜感激.
我正在研究Objective-C协议和委托,并试图在Xamarin.iOS中实现自定义协议.我在Xamarin文档中关注"绑定协议"中的示例
[BaseType (typeof(NSObject))]
[Model][Protocol]
public interface INITableViewCellDelegate {
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我找不到BaseType属性.我不能参考它.我目前的项目名称空间列表是:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using MonoTouch.CoreGraphics;
using MonoTouch.ObjCRuntime;
Run Code Online (Sandbox Code Playgroud)
我期待它应该在System或MonoTouch.ObjCRuntime下.任何人都能解释一下吗?我已经检查了StackOverflow上涉及绑定协议的其他问题,许多示例显示了相同的MonoTouch使用.
谢谢
在原生iOS中我知道如何获得设备iOS版本.但现在我想实现Xamarin.iOS.所以,
如何使用iOS版设备Xamarin.iOS?
使用Xamarin Forms,如何更改默认选择器视图以在PopoverController中显示?下面的代码抛出"弹出窗口无法从没有窗口的视图中呈现".在iOS上.
public class BindablePickerRenderer : PickerRenderer {
private UIPickerView picker;
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) {
base.OnElementChanged(e);
this.picker = new UIPickerView() {
Source = (UIPickerViewModel) new PickerSource(e.NewElement)
};
var popoverContent = new UIViewController();
popoverContent.View = picker;
var popoverController = new UIPopoverController(popoverContent);
popoverController.PopoverContentSize = new SizeF(320, 180);
popoverController.PresentFromRect(picker.Frame, this.Control.InputView, UIPopoverArrowDirection.Up, true);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在ListView我的C#文件中.但是,我想要添加我从sqlite获得的数据以及带有数据绑定的xaml文件,所以我仍然可以使用xaml编辑布局.因此,sqlite的每个响应都需要添加为label(<TextCell Text="{Binding Name}" />).
我的问题:如何将响应绑定GetCategoryByMenuID到TextCell Text="{Binding Name}"?
xaml页面(CategoriePage.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"
x:Class="AmsterdamTheMapV3.CategoriePage">
<ListView x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Name}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
Run Code Online (Sandbox Code Playgroud)
后端/ C#(CategoriePage.xaml.cs):
namespace AmsterdamTheMapV3
{
public partial class CategoriePage : ContentPage
{
public CategoriePage(String txt)
{
InitializeComponent();
var layout = new StackLayout { Padding = new Thickness(5, 10) };
int page = Int32.Parse(txt);
this.Content = layout;
var categories = App.Database.GetCategoryByMenuID(page);
var datatemplate = new DataTemplate(() …Run Code Online (Sandbox Code Playgroud) 我将Xamarin Studio与Xamarin.iOS和Xamarin.Android一起使用。我的工作区包含两种解决方案,一种用于android,另一种用于ios。项目几乎相同。当我为ios构建解决方案时,它仅重建更改的项目。它执行一些额外的操作,而这些操作几乎不需要花费时间。因此,第二次按下Build几乎不需要时间。
但是,当我构建Android解决方案时,它会重建所有项目,而不管文件,配置等方面的更改如何。如果在成功构建后按Build,它将再次重新构建。更糟糕的是,如果我尝试运行刚刚构建的项目,它将对其进行重建!此外,如果我在运行后运行项目(在调试程序时,它经常发生),它将再次重建它。由于我有许多项目,因此需要很长时间,而且编译非常依赖于CPU,因此很难提高速度。
通常,问题是是否有可能在每次构建时都不重新构建整个解决方案?也许我缺少一个配置选项,或者配置错误?
我不知道项目配置中的任何内容是否与问题相关,所以请告诉我解决方案/项目配置的哪一部分可能有所帮助。
版本:
Xamarin Studio 版本4.0.9(内部版本12) Xamarin.Android 版本:4.7.11(企业版)
//我认为,如今,对于每个严肃的编译器而言,必须进行单独的编译,所以我认为我做错了什么。
UPD:我已经安装了最新版本的Xamarin Studio和Xamarin.Android:
Xamarin Studio 版本4.0.12(内部版本3) Xamarin.Android 版本:4.8.1(企业版)
重建Android解决方案需要1分58秒。每次我运行应用程序时。