小编Ste*_*oix的帖子

Xamarin.Forms UserControl使用XAML和自定义渲染器

已经有一些关于如何创建"自定义控件"的好例子 -

我想创建一个"复合自定义控件或用户控件 ",它包含在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)

xamarin.forms

7
推荐指数
1
解决办法
1万
查看次数

可移植类库System.Object错误

我在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

6
推荐指数
1
解决办法
2908
查看次数

在带有Xamarin.iOS的iOS 7上的ViewDidAppear方法中显示被阻止的UIAlertView不起作用

如果我试图在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也有同样的问题.

有人能告诉我问题是什么吗?

感谢帮助.

xamarin.ios xamarin ios7

6
推荐指数
1
解决办法
2896
查看次数

如何将NSObject.FromObject反转回常规C#类型

与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)

monomac xamarin.mac

6
推荐指数
1
解决办法
3029
查看次数

接口是否可以在C#中使用静态变量

这可能是一个愚蠢的问题,如果有人能帮助我理解,我感激不尽.

  1. 接口C#可以有静态变量吗?

  2. 如果接口本身需要静态来声明里面的静态变量?

  3. 当我们在类中实现时,接口内的静态变量(或者说属性)的实现如何?

一些例子和明显的解释将不胜感激.

.net c# oop interface c#-4.0

6
推荐指数
1
解决办法
1万
查看次数

Xamarin.iOS找不到类型BaseType属性

我正在研究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使用.

谢谢

xamarin.ios xamarin-studio

6
推荐指数
1
解决办法
3177
查看次数

如何在Xamarin.iOS中识别iOS版本

在原生iOS中我知道如何获得设备iOS版本.但现在我想实现Xamarin.iOS.所以,

如何使用iOS版设备Xamarin.iOS

xamarin.ios ios xamarin

6
推荐指数
1
解决办法
3969
查看次数

Xamarin表单选择器 - 自定义UIPickerView

使用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)

xamarin.ios xamarin xamarin.forms

6
推荐指数
1
解决办法
2880
查看次数

如何绑定SQLite的完整响应?

我正在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)

c# sqlite wpf xaml xamarin.forms

6
推荐指数
1
解决办法
310
查看次数

为什么Xamarin.Android在运行时会重建整个解决方案?

我将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秒。每次我运行应用程序时。

android xamarin.android xamarin-studio

5
推荐指数
1
解决办法
1178
查看次数