c# - type - wpf messagebox info
Estilo de ventana WPF MessageBox (4)
¿Cómo aplicar el estilo predeterminado de Windows al MessageBox
estándar en WPF?
Por ejemplo, cuando ejecuto el siguiente código:
MessageBox.Show("Hello Stack Overflow!", "Test", MessageBoxButton.OKCancel,
MessageBoxImage.Exclamation);
Recibo un cuadro de mensaje:
Pero en WinForms todo está bien con el estilo:
MessageBox.Show("Hello Stack Overflow!", "Test", MessageBoxButtons.OKCancel,
MessageBoxIcon.Exclamation);
Además, para WPF recomendaría usar el WPF Toolkit extendido que tiene un messagebox de WPF
La razón por la que WinForms funciona de la manera en que lo hace es porque los estilos visuales están activados (es decir, usan Common Controls v6) en su función principal. Si elimina la llamada a System.Windows.Forms.Application.EnableVisualStyles() , entonces el cuadro de mensaje de WinForms tendrá el mismo aspecto que el de WPF.
Esto no ocurre con una aplicación WPF, posiblemente porque todos los controles WPF se procesan, por lo que no es necesario utilizar la nueva versión de Common Controls.
Puede intentar llamar a EnableVisualStyles()
en algún lugar del inicio de su aplicación WPF. No sé si funcionará o no, pero vale la pena intentarlo. Sin embargo, esto requerirá una referencia a System.Windows.Forms.
Según this página, WPF recoge los estilos antiguos para algunos de los controles.
Para deshacerte de él, debes crear un archivo personalizado de app.manifest (Agregar -> Nuevo elemento -> Archivo de manifiesto de la aplicación) y pegar el siguiente código en él (justo después de / trustInfo - Tag):
<!-- Activate Windows Common Controls v6 usage (XP and Vista): -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
Luego tiene que compilar su solución con esta aplicación. Manifiesto (configúrelo en las propiedades del proyecto -> Aplicación -> Señale el nuevo manifiesto en "Iconos y manifiesto").
Si comienza su aplicación ahora, debería verse como WinForms-MessageBox.
cómo lo desencadené, "redirigiendo" las referencias habituales a los formularios (funcionan igual, pero se nombran de manera diferente):
using MessageBox = System.Windows.Forms.MessageBox;
using MessageBoxImage = System.Windows.Forms.MessageBoxIcon;
using MessageBoxButton = System.Windows.Forms.MessageBoxButtons;
using MessageBoxResult = System.Windows.Forms.DialogResult;
namespace ... class ...
public MainWindow()
{
InitializeComponent();
System.Windows.Forms.Application.EnableVisualStyles();
}
public void do()
{
// updated style, but good syntax for a later solution
MessageBox.Show("Some Message", "DEBUG", MessageBoxButton.OK, MessageBoxImage.Question);
}
... la solución manifiesta no funcionó para mí.