Ookii-dialogs-wpf: рдбреАрдмрдЧрд░ рдХреЗ рддрд╣рдд рдЪрд▓рдиреЗ рддрдХ рд▓рдЯрдХрд╛ рд╣реБрдЖ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдирд╡ре░ 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ookii-dialogs/ookii-dialogs-wpf

рдЬрдм рдореИрдВ рдЕрдкрдиреЗ wpf .NET 4.6.1 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ VistaFolderBrowserDialog рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рдЯрдХрд╛ рджреЗрддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдбреАрдмрдЧрд░ (рдбреАрдмрдЧ рдпрд╛ рд░рд┐рд▓реАрдЬ рдореЛрдб рдореЗрдВ) рдХреЗ рддрд╣рдд рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдХреЙрд▓реЛрдВ рдХреЛ рдмрджрд▓рдХрд░ рдФрд░ Nuget рдкреИрдХреЗрдЬ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдХреЗ рдирдореВрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдХрд┐ рдореИрдВ VistaFolderBrowserDialog рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдирдореВрдирд╛ рдХреЛрдб рдХреЛ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреЙрдкреА/рдкреЗрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд░ рднреА рд▓рдЯрдХрддрд╛ рд╣реИред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХреНрдпреЛрдВ рдпрд╛ рдХреИрд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░реЗ рдкрд╛рд╕ рдЬрд▓реНрджреА рд╕реЗ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @augustoproieteред рдореИрдВрдиреЗ рдЪреАрдЬреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд░реЗрдкреНрд░реЛ рдЪрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдХ рд╣реИ рдЬреЛ рдпрд╣ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЕрдиреНрдп рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рдХреБрдЫ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛, рд╣реИрдВрдЧ int result = dialog.Show(owner); рдореЗрдВ private bool RunDialog(IntPtr owner)

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрд░реЗ @matelich рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдлрд╛рдВрд╕реА рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред

рд╕рдВрд▓рдЧреНрди .NET 4.6.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ wpf рдРрдк рдХрд╛ рдПрдХ рдирдореВрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ Ookii.Dialogs.Wpf v1.1.0 (_latest рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд░реВрдк рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ VistaFolderBrowserDialog рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдПрдХ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:

  • Debug рдмрд┐рд▓реНрдб _рдмрд┐рдирд╛_ рдбрд┐рдмрдЧрд░ рд╕рдВрд▓рдЧреНрди
  • Debug рдмрд┐рд▓реНрдб _with_ рдбрд┐рдмрдЧрд░ рд╕рдВрд▓рдЧреНрди
  • Release рдмрд┐рд▓реНрдб _рдмрд┐рдирд╛_ рдбрд┐рдмрдЧрд░ рд╕рдВрд▓рдЧреНрди
  • Release рдмрд┐рд▓реНрдб _with_ рдбрд┐рдмрдЧрд░ рд╕рдВрд▓рдЧреНрди

рдХреЛрдИ рдлрд╛рдВрд╕реА рдпрд╛ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реБрдЖред

рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рдлрд╛рдВрд╕реА рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рд╕рдВрд▓рдЧреНрди рдирдореВрдиреЗ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб:

var dialog = new VistaFolderBrowserDialog
{
    Description = "Please select a folder.",
    UseDescriptionForTitle = true,
};

if (!VistaFolderBrowserDialog.IsVistaFolderDialogSupported)
{
    MessageBox.Show(this,
        "You are using an old Windows version. The regular folder browser dialog will open.",
        "Sample folder browser dialog");
}

if (dialog.ShowDialog(this).GetValueOrDefault(false))
{
    MessageBox.Show(this, "The selected folder was: " + dialog.SelectedPath,
        "Sample folder browser dialog");
}

image

image


рдореЗрд░реЗ рдкрд╛рд╕ рдЬрд▓реНрджреА рд╕реЗ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @augustoproieteред рдореИрдВрдиреЗ рдЪреАрдЬреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд░реЗрдкреНрд░реЛ рдЪрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдХ рд╣реИ рдЬреЛ рдпрд╣ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЕрдиреНрдп рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рдХреБрдЫ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛, рд╣реИрдВрдЧ int result = dialog.Show(owner); рдореЗрдВ private bool RunDialog(IntPtr owner)

рд╕рдВрдмрдВрдзрд┐рдд рд▓рдЧрддрд╛ рд╣реИ:
рдЬрдм рдЪрдпрдирд┐рдд рдкрде рдПрдХ рд▓рдВрдмрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрде рд╣реИ, рддреЛ рдореБрдЭреЗ рдзреАрдореЗрдкрди рдХрд╛ рдЕрдиреБрднрд╡ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЕрдЧрд░ рдореИрдВ Native code debugging рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдореЗрдВ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

win32u.dll!NtUserMsgWaitForMultipleObjectsEx

() рдЕрдирдЬрд╛рди
user32.dll!RealMsgWaitForMultipleObjectsEx () рдЕрдЬреНрдЮрд╛рдд
shell32.dll!SHProcessMessagesUntilEventsEx () рдЕрдЬреНрдЮрд╛рдд
shell32.dll!CChangeRouterProxy::RegisterThread() рдЕрдЬреНрдЮрд╛рдд
shell32.dll!SHChangeNotifyRegisterThread
() рдЕрдирдЬрд╛рди
comdlg32.dll!CFileOpenSave::Show() рдЕрдЬреНрдЮрд╛рдд
[рдореВрд▓ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрд┐рдд]
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(System.IntPtr рд╕реНрд╡рд╛рдореА) рд▓рд╛рдЗрди 171 C#
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(System.Windows.Window Owner) Line 157 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog() рд▓рд╛рдЗрди 166 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click(рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, System.Windows.RoutedEventArgs e) рд▓рд╛рдЗрди 56 C#

рдпрд╛:

win32u.dll!00007ff9d17c9164()   Unknown
user32.dll!00007ff9d2ca059d()   Unknown
shell32.dll!SHProcessMessagesUntilEventsEx()    Unknown
shell32.dll!CChangeRouterProxy::RegisterThread()    Unknown
shell32.dll!SHChangeNotifyRegisterThread()  Unknown
comdlg32.dll!CFileOpenSave::Show()  Unknown
[Managed to Native Transition]  
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(System.IntPtr owner) Line 171    C#
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(System.Windows.Window owner) Line 157   C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog() Line 166 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click(object sender, System.Windows.RoutedEventArgs e) Line 56   C#

рдпрд╛:

ntdll.dll!RtlpHashStringToAtom()    Unknown
ntdll.dll!RtlpFreeAllAtom

() рдЕрдирдЬрд╛рди
ntdll.dll!RtlpDereferenceAtom() рдЕрдЬреНрдЮрд╛рдд
ntdll.dll!RtlDeleteAtomFromAtomTable() рдЕрдЬреНрдЮрд╛рдд
kernel32.dll!InternalDeleteAtom
() рдЕрдирдЬрд╛рди
dui70.dll!DirectUI::Value::_ZeroRelease() рдЕрдЬреНрдЮрд╛рдд
dui70.dll!DirectUI::DUIXmlParser::_DestroyTables(void) рдЕрдЬреНрдЮрд╛рдд
dui70.dll!DirectUI::DUIXmlParser::~DUIXmlParser() рдЕрдЬреНрдЮрд╛рдд
dui70.dll!DirectUI::DUIXmlParser::`рд╡реЗрдХреНрдЯрд░ рдбрд┐рд▓реАрдЯрд┐рдВрдЧ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░' () рдЕрдЬреНрдЮрд╛рдд
dui70.dll!DirectUI::AccHDelete(рдХрдХреНрд╖рд╛ DirectUI::RefcountBase *) рдЕрдЬреНрдЮрд╛рдд
shell32.dll!_DUI_ShellStyleSheet_UninitThreadIfPossible(void) рдЕрдЬреНрдЮрд╛рдд
shell32.dll!DUI_ShellStyleSheet_UninitThread(void) рдЕрдЬреНрдЮрд╛рдд
shell32.dll!CDUIViewFrame::DestroyFrameWindow(void) рдЕрдЬреНрдЮрд╛рдд
shell32.dll!CEExplorerBrowser::_CleanupFrame(void) рдЕрдЬреНрдЮрд╛рдд
shell32.dll!CEExplorerBrowser::Destroy() рдЕрдЬреНрдЮрд╛рдд
comdlg32.dll!CFileOpenSave::_OnDestroyDialog() рдЕрдЬреНрдЮрд╛рдд
comdlg32.dll!CFileOpenSave::s_OpenSaveDlgProc() рдЕрдЬреНрдЮрд╛рдд
user32.dll!UserCallDlgProcCheckWow() рдЕрдЬреНрдЮрд╛рдд
user32.dll!DefDlgProcWorker() рдЕрдЬреНрдЮрд╛рдд
user32.dll!DefDlgProcW
() рдЕрдирдЬрд╛рди
user32.dll!UserCallWinProcCheckWow() рдЕрдЬреНрдЮрд╛рдд
user32.dll!DispatchClientMessage() рдЕрдЬреНрдЮрд╛рдд
user32.dll!__fnDWORD
() рдЕрдирдЬрд╛рди
ntdll.dll! KiUserCallbackDispatcherрдЬрд╛рд░реА рд░рдЦреЗрдВ
() рдЕрдирдЬрд╛рди
win32u.dll!NtUserDestroyWindow
() рдЕрдирдЬрд╛рди
user32.dll!DialogBox2() рдЕрдЬреНрдЮрд╛рдд
user32.dll!InternalDialogBox() рдЕрдЬреНрдЮрд╛рдд
user32.dll!DialogBoxIndirectParamAorW
() рдЕрдирдЬрд╛рди
user32.dll!DialogBoxIndirectParamW
() рдЕрдирдЬрд╛рди
comdlg32.dll!CFileOpenSave::Show() рдЕрдЬреНрдЮрд╛рдд
[рдореВрд▓ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрд┐рдд]
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.RunDialog(System.IntPtr рд╕реНрд╡рд╛рдореА) рд▓рд╛рдЗрди 171 C#
Ookii.Dialogs.Wpf.dll!Ookii.Dialogs.Wpf.VistaFolderBrowserDialog.ShowDialog(System.Windows.Window Owner) Line 157 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow.ShowFolderBrowserDialog() рд▓рд╛рдЗрди 166 C#
Ookii.Dialogs.Wpf.Sample.exe!Ookii.Dialogs.Wpf.Sample.MainWindow._showDialogButton_Click(рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, System.Windows.RoutedEventArgs e) рд▓рд╛рдЗрди 56 C#

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

stricq picture stricq  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mu88 picture mu88  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vpenades picture vpenades  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Insire picture Insire  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mgpreston picture mgpreston  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ