【发布时间】:2017-04-22 08:36:04
【问题描述】:
我正在使用 Xamarin.Forms,并为 UWP 中的复选框制作了 CustomRenderer。当我通过单击“Alle”按钮将我在ListView 中的项目的所有复选框设置为true 时,复选框正确显示并带有复选框内的复选框:
但是,如果我将鼠标悬停在复选框上,它们会立即改变其外观(复选框消失但仍处于选中状态)。在以下屏幕截图中,我将光标移到了第 3-7 个复选框上:
这是我在 CustomRenderer 中重写的 OnElementChanged 方法:
protected override void OnElementChanged(ElementChangedEventArgs<EvaCheckbox> e)
{
base.OnElementChanged(e);
var model = e.NewElement;
if (model == null)
{
return;
}
nativeCheckbox = new CheckBox();
CheckboxPropertyChanged(model, null);
model.PropertyChanged += OnElementPropertyChanged;
nativeCheckbox.Checked += (object sender, Windows.UI.Xaml.RoutedEventArgs eargs) =>
{
model.IsChecked = (bool)nativeCheckbox.IsChecked;
};
nativeCheckbox.Unchecked += (object sender, Windows.UI.Xaml.RoutedEventArgs eargs) =>
{
model.IsChecked = (bool)nativeCheckbox.IsChecked;
};
SetNativeControl(nativeCheckbox);
}
我试图覆盖nativeCheckbox 的PointerEntered 事件。它可以工作,例如,如果我在此事件上将 model.IsChecked 设置为 true,它将被设置为 true:
nativeCheckbox.PointerEntered += (s, args) =>
{
model.IsChecked = true;
};
但我不知道如何(即使在这个地方)在将光标移动到复选框上方时阻止复选框更改其外观。像这样用空代码留下触发事件不会改变所描述行为的任何内容:
nativeCheckbox.PointerEntered += (s, args) => { };
当我将光标移到复选框上时,如何防止复选框改变其外观?
更新:
我为此问题创建了一个示例项目。你可以在这里找到存储库:https://github.com/Zure1/CustomCheckbox
它具有完全相同的描述行为。在下面的屏幕截图中,我按下了屏幕底部的“全部”按钮,然后复选框看起来是正确的,里面有一个检查:
将鼠标光标移到底部 3 个复选框上后,它们的外观会发生变化:
信息:我正在我的桌面上进行调试 (Windows 10)。我不知道 WinPhone 是否存在这个问题。以防您想知道为什么我的复选框是红色的:我在 Windows 中的系统颜色是红色。
【问题讨论】:
标签: c# checkbox xamarin.forms custom-controls