拙网论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 196|回复: 0

一步一步掌握sharpdevelop4,创建自己的pad,和自己的view

[复制链接]

949

主题

1001

帖子

3736

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3736
发表于 2018-6-22 13:58:45 | 显示全部楼层 |阅读模式
SD中pad和view是比较的难以掌握的一个部分,因为其中的调用关系比较复杂,我没有直接去看代码,而是借用了
http://www.cnblogs.com/michael-zhang/articles/629724.html
中demo的一个部分,下边我就来说一个,这个如何使用sd做一个自己的pad和view
这个demo把系统中的代码给简化了一部分,看起来,分析起来比较直观
我们看到的是一个主窗口是workbench,它带有一个菜单,一个工具栏,两个pad,一个contentview,
workbench实现了一个iworkbech的接口
从图上我们可以看到,其中一个是打开的文件,文件名是我写死到代码里边的
从我们发出打开一个文件的指令到,文件呈现在我们面前,这个过程依次是:
btn发出打开一个文件的命令,调用->FileService,
FileService必须为这个文件创建一个ViewContent并加入workbench的ViewCollection的集合中
怎么找到与这个文件对应的ViewContent,
FileService调用DisplayBindingService,从这里找到能打开这个文件并能创建视图的一个IDisplayBinding

public interface IDisplayBinding
{
    /// <remarks>
    /// This function determines, if this display binding is able to create
    /// an IViewContent for the file given by fileName.
    /// </remarks>
    /// <returns>
    /// true, if this display binding is able to create
    /// an IViewContent for the file given by fileName.
    /// false otherwise
    /// </returns>
    bool CanCreateContentForFile(string fileName);

    /// <remarks>
    /// Creates a new IViewContent object for the file fileName
    /// </remarks>
    /// <returns>
    /// A newly created IViewContent object.
    /// </returns>
    IViewContent CreateContentForFile(string fileName);
}

DisplayBindingService:从DisplayBindingDescriptor的集合中找到能打开这个文件的的IDisplayBinding
返回 IDisplayBinding,后,由FileService调用IDisplayBinding.CreateContentForFile方法创建视图,返回一个IViewContent
那么了解了这些,我们就做一个自己的binding了,和自己的Service就比较简单了
第一步,做一个实现了IDisplayBinding的类,指出我们可以打开的文件类型

public class HouseManDisplayBinding : IDisplayBinding
{
    IDisplayBinding Members

}


第二,做与这个文件类型对应的IViewContent

public abstract class AbstractViewContent : IViewContent{//......}

public class ConDisplayBindingWrapper : AbstractViewContent
{

    Panel _panel;

    public override Control Control
    {
        get
        {
            return _panel;
        }
    }


    public override void Load(string fileName)
    {
        Control con=new HouseCon();//一个基于usercontrol做的一个非常简单的一小控件
        con.Location = new Point(1, 1);

        _panel = new Panel();
        _panel.AutoScroll = true;
        _panel.Dock = DockStyle.Fill;
        _panel.TabIndex = 1;
        _panel.Controls.Add(con);

        TitleName = System.IO.Path.GetFileName("控件");
    }

    public override void Dispose()
    {
        _panel.Controls.Clear();
        _panel = null;
    }
}第三步,在程序的addin文件中加入这个binding就可以了



<DisplayBinding id    =     "Control"
                        insertbefore
= "Text"
                        supportedformats
= "控件"
                        class
= "SharpGui.ViewContent.HouseManDisplayBinding" />


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|抱朴守拙BBS

GMT+8, 2025-5-26 05:40 , Processed in 0.182732 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表