Как получить Windows родной вид для .NET TreeView? - PullRequest
25 голосов
/ 27 февраля 2011

Trees

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

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

1 Ответ

42 голосов
/ 27 февраля 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...