Xamarin.Forms MasterDetailPage의 Master 너비 변경 (iOS)
9610 단어 Xamarin.iOSXamarinXamarin.Forms
이것을 UI 측에서 변경할 수 있는 구조가 필요하다고 생각해, MasterDetailPage 의 확장 클래스를 작성했습니다.
완성 이미지는 이쪽
MasterDetail 클래스 확장
표준으로 폭을 변경하기 위한 프로퍼티가 제공되어 있지 않기 때문에, MasterDetailPage 클래스를 상속해, 프로퍼티를 추가합니다.
public static readonly BindableProperty MasterFractionProperty =
BindableProperty.Create(
propertyName: nameof(MasterFraction),
returnType: typeof(double),
declaringType: typeof(VariableMasterDetailPage),
defaultValue: 0.0,
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: OnMasterFractionChanged);
public double MasterFraction
{
get { return (double)GetValue(MasterFractionProperty); }
set { SetValue(MasterFractionProperty, value); }
}
protected static void OnMasterFractionChanged(BindableObject bindable, object oldValue, object newValue)
{
var page = (VariableMasterDetailPage)bindable;
var newFraction = (double)newValue;
if (newFraction < page.MinimumFraction || page.MaximumFraction < newFraction)
throw new ArgumentOutOfRangeException();
var oldFraction = (double)oldValue;
if (oldFraction.Equals(newFraction) == false)
{
page.MasterFraction = newFraction;
page.OnPropertyChanged(nameof(page.MasterFraction));
}
}
CustomRenderer
TabletMasterDetailRenderer를 상속한 CustomRenderer를 iOS 프로젝트에 추가합니다. MaximumPrimaryColumnWidth를 변경하는 것이 포인트입니다.
using System;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using UIKit;
using VariableMaster;
using VariableMaster.Controls;
using VariableMaster.iOS;
[assembly: ExportRenderer(typeof(VariableMasterDetailPage), typeof(VarriableMasterDetailPageRenderer))]
namespace VariableMaster.iOS
{
public class VarriableMasterDetailPageRenderer : TabletMasterDetailRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
var page = e.NewElement as VariableMasterDetailPage;
if (page != null)
{
page.PropertyChanged += (sender, args) =>
{
if (args.PropertyName == "MasterFraction")
{
MaximumPrimaryColumnWidth = (nfloat)(page.Width * page.MasterFraction / 100);
PreferredPrimaryColumnWidthFraction = (nfloat)page.MasterFraction / 100;
}
};
}
base.OnElementChanged(e);
}
}
}
전체 소스 코드는 여기 리포지토리를 참조하십시오. 이상한 곳이 있으면 PR 잘 부탁드립니다.
htps : // 기주 b. 코 m / s
Reference
이 문제에 관하여(Xamarin.Forms MasterDetailPage의 Master 너비 변경 (iOS)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/smallgeek/items/00d01247cd7e48498117텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)