复选框在发布模式 UWP (Xamarin Forms) 中不可见
Checkboxes not visible in release mode UWP (Xamarin Forms)
我是 xamarin.forms 的新手。
我使用 XLabs 库在我的 PCL 项目 (Xamarin Forms) 中添加复选框。
当我 运行 我的应用程序 UWP ARM 处于调试模式时没有错误,但是当我 运行 应用程序处于发布模式时,复选框从未显示。
有没有我需要配置的设置?
正如@hugo 所说,XLabs 库不再维护。它可能不适用于较新版本的 Xamarin.Forms。根据您的要求,您可以使用 Switch
控件来替换复选框或使用自定义复选框控件。下面的代码实现了一个简单的复选框。更多请参考Introduction to Custom Renderers.
CustomCheckBox.cs
public class CustomCheckBox : View
{
public static readonly BindableProperty CheckedProperty =
BindableProperty.Create("Checked", typeof(bool), typeof(CustomCheckBox), default(bool));
public bool Checked
{
get { return (bool)GetValue(CheckedProperty); }
set { SetValue(CheckedProperty, value); }
}
}
CustomCheckBoxRenderer.cs
[assembly: ExportRenderer(typeof(CustomCheckBox), typeof(CustomCheckBoxRenderer))]
namespace LabsTest.UWP
{
public class CustomCheckBoxRenderer : ViewRenderer<CustomCheckBox, Windows.UI.Xaml.Controls.CheckBox>
{
protected override void OnElementChanged(ElementChangedEventArgs<CustomCheckBox> e)
{
base.OnElementChanged(e);
if (Control == null)
{
SetNativeControl(new Windows.UI.Xaml.Controls.CheckBox());
}
if (Control != null)
{
Control.IsChecked = Element.Checked;
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == nameof(Element.Checked))
{
UpdateStatus();
}
}
private void UpdateStatus()
{
Control.IsChecked = Element.Checked;
}
}
}
用法
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<local:CustomCheckBox x:Name="MyCheckBox" Checked="True">
</local:CustomCheckBox>
</StackLayout>
我是 xamarin.forms 的新手。
我使用 XLabs 库在我的 PCL 项目 (Xamarin Forms) 中添加复选框。
当我 运行 我的应用程序 UWP ARM 处于调试模式时没有错误,但是当我 运行 应用程序处于发布模式时,复选框从未显示。
有没有我需要配置的设置?
正如@hugo 所说,XLabs 库不再维护。它可能不适用于较新版本的 Xamarin.Forms。根据您的要求,您可以使用 Switch
控件来替换复选框或使用自定义复选框控件。下面的代码实现了一个简单的复选框。更多请参考Introduction to Custom Renderers.
CustomCheckBox.cs
public class CustomCheckBox : View
{
public static readonly BindableProperty CheckedProperty =
BindableProperty.Create("Checked", typeof(bool), typeof(CustomCheckBox), default(bool));
public bool Checked
{
get { return (bool)GetValue(CheckedProperty); }
set { SetValue(CheckedProperty, value); }
}
}
CustomCheckBoxRenderer.cs
[assembly: ExportRenderer(typeof(CustomCheckBox), typeof(CustomCheckBoxRenderer))]
namespace LabsTest.UWP
{
public class CustomCheckBoxRenderer : ViewRenderer<CustomCheckBox, Windows.UI.Xaml.Controls.CheckBox>
{
protected override void OnElementChanged(ElementChangedEventArgs<CustomCheckBox> e)
{
base.OnElementChanged(e);
if (Control == null)
{
SetNativeControl(new Windows.UI.Xaml.Controls.CheckBox());
}
if (Control != null)
{
Control.IsChecked = Element.Checked;
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == nameof(Element.Checked))
{
UpdateStatus();
}
}
private void UpdateStatus()
{
Control.IsChecked = Element.Checked;
}
}
}
用法
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<local:CustomCheckBox x:Name="MyCheckBox" Checked="True">
</local:CustomCheckBox>
</StackLayout>