How to get Windows native look for the .NET TreeView?

后端 未结 1 1285
时光说笑
时光说笑 2020-11-27 03:33

\"Trees\"

When using the TreeView component in .NET, I get the look of the left tree. How can I get the look of

相关标签:
1条回答
  • 2020-11-27 03:49

    You need to P/Invoke to call SetWindowTheme passing the window handle of the tree and use "explorer" as the theme.

    Paste the following code into a new class in your project, compile, and use this custom control instead of the built-in TreeView control.

    C#:

    public class NativeTreeView : System.Windows.Forms.TreeView
    {
        [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
        private extern static int SetWindowTheme(IntPtr hWnd, string pszSubAppName,
                                                string pszSubIdList);
    
        protected override void CreateHandle()
        {
            base.CreateHandle();
            SetWindowTheme(this.Handle, "explorer", null);
        }
    }
    

    VB.NET:

    Public Class NativeTreeView : Inherits TreeView
    
        Private Declare Unicode Function SetWindowTheme Lib "uxtheme.dll"
            (hWnd As IntPtr, pszSubAppName As String, pszSubIdList As String) As Integer
    
        Protected Overrides Sub CreateHandle()
            MyBase.CreateHandle()
            SetWindowTheme(Me.Handle, "Explorer", Nothing)
        End Sub
    
    End Class
    

    Note that this trick also works exactly the same way for the ListView control.

    0 讨论(0)
提交回复
热议问题