【问题标题】:WPF in an MMC snapinMMC 管理单元中的 WPF
【发布时间】:2010-04-25 02:53:27
【问题描述】:

有人可以提供一些在自定义 MMC 管理单元中使用 WPF 的示例代码吗?我是 WPF 新手,我已经了解编写 MMC 管理单元的示例,但我不明白如何选择 WPF 而不是 Winforms。

【问题讨论】:

    标签: wpf mmc


    【解决方案1】:

    我刚刚花了一个上午的时间为我正在进行的项目构建了这个确切的场景。这是代码的上下文无关版本:

    /// <summary>
    /// Defines a scope node with a default Forms view that will host a
    /// WPF control.
    /// </summary>
    public class WPFScopeNode: ScopeNode
    {
        /// <summary>
        /// Instantiates a new specialized scope node.
        /// </summary>
        public WPFScopeNode()
            : base()
        {
            this.DisplayName = "Name in tree view";
    
            // TODO: Create any child scope nodes, adding them to 'this.Children'.
    
            // Attach a forms view to this node that hosts a WPF control.
            var wpfFormView = new FormViewDescription
            {
                DisplayName = "Name of view",
                ControlType = typeof(WPFHostControl),
                ViewType = typeof(WPFHostFormView)
            };
            this.ViewDescriptions.Add(wpfFormView );
        }
    }
    
    
    /// <summary>
    /// This class provides a model-interface for the hosted WPF control.
    /// </summary>
    public class WPFHostFormView : FormView
    {
        public WPFHostFormView ()
        {
            this.DescriptionBarText = "WPF Host View";
        }
    
        /// <summary>
        /// Defines the structure of the form view.
        /// </summary>
        /// <param name="status"></param>
        protected override void OnInitialize(AsyncStatus status)
        {
            base.OnInitialize(status);
    
            // TODO: This may be a good place to pass 'this.Control' the
            // data context that will be used for databinding by the WPF
            // control.  Note that 'this.Control' is the Windows Forms
            // UserControl that contains an ElementHost which, in turn,
            // hosts the WPF UserControl of interest.
        }
    }
    
    
    /// <summary>
    /// Defines a Windows Forms control that hosts a specific WPF UserControl.
    /// Note the logic for automatic resizing to the parent surface in the
    /// MMC MDI interface.
    /// Also, 'MyWPFUserControl' is just a standard WPF
    /// UserControl; nothing special needs to be done there for MMC integration.
    /// </summary>
    public partial class WPFHostControl : UserControl
    {
        // TODO: Expose a method for setting the DataContext of the hosted element!
    
        public WPFHostControl ()
        {
            InitializeComponent();
    
            ParentChanged += new EventHandler(WPFHostControl_ParentChanged);
        }
    
        void WPFHostControl_ParentChanged(object sender, EventArgs e)
        {
            if (Parent != null)
            {
                Size = Parent.ClientSize;
                Parent.ClientSizeChanged +=
                    new EventHandler(Parent_ClientSizeChanged);
            }
        }
    
        void Parent_ClientSizeChanged(object sender, EventArgs e)
        {
            if (Parent != null)
            {
                Size = Parent.ClientSize;
            }
        }
    
        private MyWPFUserControl hostedControl;
        private System.Windows.Forms.Integration.ElementHost elementHost;
    
        /// <remarks>
        /// To make the Visual Studio designer work smoothly, you could
        /// split this function into a *.designer.cs file using a partial
        /// class definition.
        /// </remarks>
        private void InitializeComponent()
        {
            this.elementHost = new System.Windows.Forms.Integration.ElementHost();
            this.hostedControl = new MyWPFUserControl();
            this.SuspendLayout();
            // 
            // elementHost
            // 
            this.elementHost.Dock = System.Windows.Forms.DockStyle.Fill;
            this.elementHost.Location = new System.Drawing.Point(0, 0);
            this.elementHost.Name = "elementHost";
            this.elementHost.Size = new System.Drawing.Size(150, 150);
            this.elementHost.TabIndex = 0;
            this.elementHost.Child = this.hostedControl;
            // 
            // EnvironmentDashboard
            // 
            this.Controls.Add(this.elementHost);
            this.Name = "WPF Host View";
            this.ResumeLayout(false);
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多