Подтвердить что ты не робот

Как получить внешний вид Windows для .NET TreeView?

Trees

При использовании компонента TreeView в .NET я получаю вид левого дерева. Как я могу получить вид правильного дерева (Windows Native Look) для моего .NET TreeView?

Что я особенно хочу получить, это "треугольник" node и синий квадрат выбора "пузырь".

4b9b3361

Ответ 1

Вам нужно P/Invoke вызвать SetWindowTheme передачу дескриптора окна дерева и использовать "explorer" в качестве темы.

Вставьте следующий код в новый класс в свой проект, скомпилируйте и используйте этот настраиваемый элемент управления вместо встроенного элемента управления TreeView.

С#:

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

Обратите внимание, что этот трюк также работает точно таким же образом для элемента управления ListView.