2010-04-25 31 views
5

Ai đó có thể cung cấp một số mã mẫu để sử dụng WPF trong snapin MMC tùy chỉnh không? Tôi mới vào WPF, và tôi đã hiểu các mẫu để viết các snap MMC, nhưng tôi không hiểu cách chọn WPF thay vì Winforms.WPF trong hình chụp nhanh MMC

Trả lời

10

Tôi đã dành buổi sáng để xây dựng kịch bản chính xác này cho một dự án mà tôi đang làm việc. Đây là phiên bản không có ngữ cảnh của mã:

/// <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); 

    } 
} 
Các vấn đề liên quan