修复小bug

This commit is contained in:
ww-rm
2025-04-19 00:41:40 +08:00
parent c7971a9829
commit 16739c39d6
3 changed files with 15 additions and 21 deletions

View File

@@ -186,10 +186,9 @@ namespace SpineViewer.Spine.SpineView
{
return new StandardValuesCollection(tracks.Spine.AnimationNames);
}
else if (context?.Instance is object[] instances && instances.All(x => x is SpineAnimationProperty))
else if (context?.Instance is SpineAnimationProperty[] animTracks)
{
// XXX: 这里不知道为啥总是会得到 object[] 类型而不是具体的类型
var animTracks = instances.Cast<SpineAnimationProperty>().ToArray();
// XXX: 莫名其妙好了, 不是 object[] 类型是具体的类型
if (animTracks.Length > 0)
{
IEnumerable<string> common = animTracks[0].Spine.AnimationNames;

View File

@@ -61,12 +61,10 @@ namespace SpineViewer.Spine.SpineView
}
/// <summary>
/// 皮肤属性描述符, 实现对皮肤的加载和卸载, <c><see cref="SpineSkinProperty"/>.Skin_{name}</c>
/// 皮肤属性描述符, 实现对皮肤的加载和卸载, <c><see cref="SpineSkinProperty"/>.{name}</c>
/// </summary>
private class SkinPropertyDescriptor(string name, Attribute[]? attributes) : PropertyDescriptor($"Skin_{name}", attributes)
private class SkinPropertyDescriptor(string name, Attribute[]? attributes) : PropertyDescriptor(name, attributes)
{
private readonly string name = name;
public override Type ComponentType => typeof(SpineSkinProperty);
public override bool IsReadOnly => false;
public override Type PropertyType => typeof(bool);
@@ -77,7 +75,7 @@ namespace SpineViewer.Spine.SpineView
public override object? GetValue(object? component)
{
if (component is SpineSkinProperty prop)
return prop.Spine.GetSkinStatus(name);
return prop.Spine.GetSkinStatus(Name);
return null;
}
@@ -86,7 +84,7 @@ namespace SpineViewer.Spine.SpineView
if (component is SpineSkinProperty prop)
{
if (value is bool s)
prop.Spine.SetSkinStatus(name, s);
prop.Spine.SetSkinStatus(Name, s);
}
}
}

View File

@@ -65,10 +65,8 @@ namespace SpineViewer.Spine.SpineView
/// <summary>
/// 槽位属性描述符, 实现对属性的读取和赋值
/// </summary>
internal class SlotPropertyDescriptor(string name, Attribute[]? attributes) : PropertyDescriptor($"Slot_{name}", attributes)
internal class SlotPropertyDescriptor(string name, Attribute[]? attributes) : PropertyDescriptor(name, attributes)
{
public string SlotName { get; } = name;
public override Type ComponentType => typeof(SpineSlotProperty);
public override bool IsReadOnly => false;
public override Type PropertyType => typeof(SlotProperty);
@@ -82,7 +80,7 @@ namespace SpineViewer.Spine.SpineView
public override object? GetValue(object? component)
{
if (component is SpineSlotProperty slots)
return slots.Spine.GetSlotAttachment(SlotName);
return slots.Spine.GetSlotAttachment(Name);
return null;
}
@@ -94,7 +92,7 @@ namespace SpineViewer.Spine.SpineView
if (component is SpineSlotProperty slots)
{
if (value is string s)
slots.Spine.SetSlotAttachment(SlotName, s);
slots.Spine.SetSlotAttachment(Name, s);
}
}
}
@@ -103,7 +101,7 @@ namespace SpineViewer.Spine.SpineView
}
/// <summary>
/// 对 <c><see cref="SpineSlotProperty"/>.Slot_{name}</c> 属性的包装类
/// 对 <c><see cref="SpineSlotProperty"/>.{name}</c> 属性的包装类
/// </summary>
[TypeConverter(typeof(SlotPropertyConverter))]
public class SlotProperty(SpineObject spine, string name)
@@ -148,23 +146,22 @@ namespace SpineViewer.Spine.SpineView
public override StandardValuesCollection? GetStandardValues(ITypeDescriptorContext? context)
{
if (context?.PropertyDescriptor is SpineSlotProperty.SlotPropertyDescriptor pd)
if (context?.PropertyDescriptor is PropertyDescriptor pd)
{
if (context?.Instance is SpineSlotProperty slots)
{
if (slots.Spine.SlotAttachmentNames.TryGetValue(pd.SlotName, out var names))
if (slots.Spine.SlotAttachmentNames.TryGetValue(pd.Name, out var names))
return new StandardValuesCollection(names);
}
else if (context?.Instance is object[] instances && instances.All(x => x is SpineSlotProperty))
else if (context?.Instance is SpineSlotProperty[] spinesSlots)
{
// XXX: 这里不知道为啥总是会得到 object[] 类型而不是具体的类型
var spinesSlots = instances.Cast<SpineAnimationProperty>().ToArray();
// XXX: 莫名其妙好了, 不是 object[] 类型是具体的类型
if (spinesSlots.Length > 0)
{
IEnumerable<string> common = [];
foreach (var t in spinesSlots)
{
if (t.Spine.SlotAttachmentNames.TryGetValue(pd.SlotName, out var names))
if (t.Spine.SlotAttachmentNames.TryGetValue(pd.Name, out var names))
common = common.Union(names);
}
return new StandardValuesCollection(common.ToArray());