Estoy totalmente ciego, uso el lector de pantalla NVDA para operar mi sistema y estoy tratando de crear una aplicación de escritorio de Windows. Visual Studio no es compatible con lectores de pantalla, al menos no con la parte del diseñador de formularios. VS Code es bastante accesible, aunque el diseñador de protools de powershell no lo es.
Cada vez que veo una pregunta sobre cómo escribir GUI en WPF con código puro, encuentro mucho "¿por qué en el nombre de Dios querrías hacer eso? ¡Usa VS!" respuestas Bueno, aquí está la razón, el diseñador de formularios VS está fuera del alcance de los programadores ciegos, por lo que el enfoque menos práctico tendrá que funcionar.
Entonces, ¿se puede hacer? ¿Sugeriría algún recurso o enfoque para esto?
Si. Puedes hacer WPF solo con código.
Aquí hay un ejemplo simple de http://www.java2s.com/Tutorial/CSharp/0470__Windows-Presentation-Foundation/CodeOnlyWPFApplicationSample.htm
using System; using System.Windows; using System.Windows.Controls; public class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MainWindow window = new MainWindow(); window.Show(); } [STAThread] public static void Main() { App app = new App(); app.Run(); } } public class MainWindow : Window { protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); Button closeButton = new Button(); closeButton.Content = "Close"; this.Content = closeButton; closeButton.Click += delegate { this.Close(); }; } }Además, podría ser más fácil usar WinForms ya que usa C# como código subyacente y menos XML.
Voy a intentar construir a partir del otro ejemplo para obtener un código compilable. Para que WPF funcione, necesitará un proyecto que se compile con compatibilidad con WPF.
La forma más sencilla es crear un .csproj nosotros mismos y usar la solución de solo código publicada anteriormente.
Entonces, comience con un archivo App.csproj mínimo así:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net5.0-windows</TargetFramework> <UseWPF>true</UseWPF> </PropertyGroup> </Project> Luego, la aplicación y el código de la ventana en App.cs como antes. Le agregué un par de controles, ya que necesitará un contenedor de todos modos (utilicé StackPanel ) si desea comenzar a agregar más cosas más adelante.
using System; using System.Windows; using System.Windows.Controls; public class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); new MainWindow().Show(); } [STAThread] public static void Main() => new App().Run(); } public class MainWindow : Window { protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); var panel = new StackPanel(); this.Content = panel; var label = new Label { Content = "Click me:" }; panel.Children.Add(label); var closeButton = new Button { Content = "Close", Height = 100 }; closeButton.Click += (sender, args) => this.Close(); panel.Children.Add(closeButton); (this.Width, this.Height) = (200, 200); } } Luego compila todo el proyecto utilizando dotnet build . Y puede ejecutarlo con dotnet run o invocando el exe directamente.
Como alternativa, si desea explorar un proyecto WPF con código .xaml y .xaml.cs independiente, puede crear su proyecto mediante dotnet new wpf -o MyProjectName . Esto producirá un proyecto, una aplicación basada en xaml y un formulario basado en xaml.