0
Я напишу список дел, и ярлык элемента должен быть вычеркнут, когда его сделано и удалено при отмене. Вычеркивание на клик работает, но я не могу удалить его, когда он уже вычеркнут. Мои подходы заключались в RemoveAttribute на NSMutableAttributedString или, возможно, для перерисовки всей метки.Как удалить эффект выпадения ярлыка
[assembly:ResolutionGroupName(OvanTasks.LabelStrikeOutEffect.EffectNamespace)]
[assembly: ExportEffect(typeof(LabelStrikeOutEffect), nameof(LabelStrikeOutEffect))]
namespace OvanTasks.iOS
{
public class LabelStrikeOutEffect : PlatformEffect
{
public LabelStrikeOutEffect()
{
}
protected override void OnAttached()
{
SetStrikeOut(true);
}
protected override void OnDetached()
{
SetStrikeOut(false);
}
protected override void OnElementPropertyChanged(System.ComponentModel.PropertyChangedEventArgs args)
{
base.OnElementPropertyChanged(args);
if (args.PropertyName == Label.TextProperty.PropertyName || args.PropertyName == Label.FormattedTextProperty.PropertyName)
{
SetStrikeOut(true);
}
}
private void SetStrikeOut(bool strikeout)
{
try
{
var label = (UILabel)Control;
var text = (NSMutableAttributedString)label.AttributedText;
var range = new NSRange(0, text.Length);
if (strikeout)
{
text.AddAttribute(UIStringAttributeKey.StrikethroughStyle, NSNumber.FromInt32((int)NSUnderlineStyle.Single), range);
}
else
{
Device.BeginInvokeOnMainThread(() => {
text.RemoveAttribute(UIStringAttributeKey.StrikethroughStyle, range);
});
}
}
catch (Exception ex)
{
Console.WriteLine("Cannot strike out Label. Error: " + ex.Message.ToString());
}
finally {
Control.SetNeedsDisplay();
}
}
}
}