2017-01-23 4 views
1

Как установить размер в xaml пользовательского представления или, более конкретно, собственный BoxView? В настоящее время представление занимает весь размер устройства вместо запрошенного 20x20.Xamarin.Forms установить размер пользовательского представления

enter image description here

Вот мой 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:Beltpack" 
      xmlns:controls="clr-namespace:Beltpack.Views;assembly=Beltpack" 
      x:Class="Beltpack.MainPage"> 

    <controls:bpButton Height="20" Width="20" HeightRequest="20" WidthRequest="20" /> 

</ContentPage> 

Моя кнопка извлечения из BoxView (в настоящее время ничего не делает)

using Xamarin.Forms; 

namespace Beltpack.Views { 
    public class bpButton : BoxView { 

     public bpButton() { } 

    } 

} 

И мой пользовательский рендерер

using Android.Graphics; 
using Xamarin.Forms.Platform.Android; 
using Xamarin.Forms; 
using Beltpack.Views; 
using Beltpack.Droid; 

[assembly: ExportRenderer(typeof(bpButton), typeof(bpButtonRenderer))] 

namespace Beltpack.Droid { 
    public class bpButtonRenderer : BoxRenderer { 

     public bpButtonRenderer() {} 

     protected override void OnDraw(Canvas canvas) { 
      bpButton btn = (bpButton)this.Element; 

      Paint paint = new Paint(); 
      paint.Color = Android.Graphics.Color.Aqua; 

      canvas.DrawCircle((int)(btn.WidthRequest * .5), (int)(btn.HeightRequest * .5), (int)(btn.WidthRequest * .5), paint); 
     }   
    } 
} 
+0

проверил ли вы, если WidthRequest и HeightRequest имеют правильные значения в функции OnDraw? Я подозреваю, что вы должны принудительно перерисовать функцию OnElementChanged. – Gusman

ответ

1

В дополнение к установке WidthRequest и HeightRequest, необходимо также установить параметры HorizontalOptions и VerticalOptions.

Почему? Я понятия не имею, но это решение было предложено в другом месте и постоянно работало для меня.

Похоже, что вы хотите, в центре, так что вы могли бы просто написать

<controls:bpButton 
    Height="20" 
    Width="20" 
    HeightRequest="20" 
    WidthRequest="20" 
    HorizontalOptions="Center" 
    VerticalOptions="Center" /> 
+0

Спасибо! По какой-то причине он слегка отцентрирован ... Но я, надеюсь, смогу это выяснить ... – bwoogie

Смежные вопросы