wpf

Przycisk pomocy?


Jak dodać ten przycisk do paska tytułu w WPF, ponieważ jest używany tak często w tak wielu aplikacjach, myślałem, że będzie to wbudowane lub coś w tym rodzaju, ale wygląda na to, że tak nie jest. W każdym razie, daj mi znać, jeśli coś o tym wiesz.
Podziękować.
Edytować:
Czy nie ma nic równoważnego

to
http://msdn.microsoft.com/en-u ... .aspx
?
Zasadniczo mieć? ikona w formularzach wygranych, wszystko co musisz zrobić to:
public Form1()
{
InitializeComponent(); this.HelpButton = true;
this.MaximizeBox = false;
this.MinimizeBox = false;
}

Czy WPF nie ma czegoś takiego?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To proste, po prostu wklej ten kod do swojej klasy Window.
Ten kod używa współdziałania, aby usunąć style WS_MINIMIZEBOX i WS_MAXIMIZEBOX oraz dodać rozszerzony styl WS_EX_CONTEXTHELP (znak zapytania pojawi się tylko wtedy, gdy usuniesz przyciski zwijania i rozwijania).
EDYCJA: Dodano wykrywanie kliknięć przycisku pomocy, odbywa się to poprzez połączenie z WndProc za pomocą HwndSource.AddHook i nasłuchiwanie wiadomości WM_SYSCOMMAND za pomocą wParam SC_CONTEXTHELP.
Po wykryciu kliknięcia ten kod pokaże okno komunikatu, zmieniając je na zdarzenie, zdarzenie kierowane lub nawet polecenie (dla aplikacji MVVM) pozostawione jako ćwiczenie dla czytelnika.
private const uint WS_EX_CONTEXTHELP = 0x00000400;
private const uint WS_MINIMIZEBOX = 0x00020000;
private const uint WS_MAXIMIZEBOX = 0x00010000;
private const int GWL_STYLE = -16;
private const int GWL_EXSTYLE = -20;
private const int SWP_NOSIZE = 0x0001;
private const int SWP_NOMOVE = 0x0002;
private const int SWP_NOZORDER = 0x0004;
private const int SWP_FRAMECHANGED = 0x0020;
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_CONTEXTHELP = 0xF180;
[DllImport("user32.dll")]
private static extern uint GetWindowLong(IntPtr hwnd, int index);[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hwnd, int index, uint newStyle);[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter, int x, int y, int width, int height, uint flags);
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;
uint styles = GetWindowLong(hwnd, GWL_STYLE);
styles &= 0xFFFFFFFF ^ (WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
SetWindowLong(hwnd, GWL_STYLE, styles);
styles = GetWindowLong(hwnd, GWL_EXSTYLE);
styles |= WS_EX_CONTEXTHELP;
SetWindowLong(hwnd, GWL_EXSTYLE, styles);
SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
((HwndSource)PresentationSource.FromVisual(this)).AddHook(HelpHook);
}private IntPtr HelpHook(IntPtr hwnd,
int msg,
IntPtr wParam,
IntPtr lParam,
ref bool handled)
{
if (msg == WM_SYSCOMMAND &&
((int)wParam & 0xFFF0) == SC_CONTEXTHELP)
{
MessageBox.Show("help");
handled = true;
}
return IntPtr.Zero;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W WPF nie pojawiają się żadne przyciski pomocy. Jednak nie powinno być bodźcem do rzucania własnym.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się