I know this question has been asked before.我对给出的答案不满意。
我正在寻找一种编译时解决方案。有没有办法说隐藏ItemsItemSource成员而不破坏类的功能,或者这不是预期的功能吗?例如,我可以通过反映ItemsControl<T>并更改代码来创建ItemsControl还是如何实现这一目标?

详细地说,我正在制作一个SlideShow控件以幻灯片形式显示图像。它从ItemsControl继承,因为它将有多个子级,但是我想将其子级限制为Image对象,仅是因为我需要访问这些对象。我想在编译时强制执行此限制,以便我可以安全地访问特定的Image成员,而不必担心子级是什么类型。

最佳答案

我对WPF并不是很有经验,但是在普通的C#中,我只是委派控制。

例如,如果我试图限制可以添加到ArrayList的对象,则可以执行以下操作:

public class ArrayListDemo
{
    private ArrayList innerList;

    public ArrayListDemo()
    {
        innerList = new ArrayList();
    }

    public int Add(string str)
    {
        return innerList.Add(str);
    }

    public void Remove(string str)
    {
        innerList.Remove(str);
    }

    public string this[int index]
    {
        get
        {
            return innerList[index] as string;
        }
        set
        {
            innerList[index] = value;
        }
    }

    public static implicit operator ArrayList(ArrayListDemo stringArrayList)
    {
        return stringArrayList.innerList;
    }
}


这使我可以编写自己的方法实现,而无需重载所有方法。隐式转换可用意味着编译器将知道可以使用我们的对象代替我们要覆盖的对象。再说一次,我不知道这是否可以用WPF来完成,或者覆盖和委派电话的工作是否过于复杂,但是我想指出这种方法是可行的。

关于c# - 限制ItemsControl的子代的编译时类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21619961/

10-13 03:18