我刚刚开始学习C#(来自Java)并且我更喜欢手动开发我的Windows,但我发现的所有MSDN指南都涉及使用XAML视图。我在哪里可以找到解释如何手动执行此操作的教程?
编辑:似乎不建议这样做,所以在特定条件为真时如何添加游戏循环或绘图等逻辑?
答案 0 :(得分:8)
你会非常喜欢Charles Petzold的 Applications = Code + Markup 。他从C#代码开始,后来才引入XAML。
话虽如此,你不应该这样做。 XAML即使有其冗长的含义,也常常以非显而易见的方式隐藏大量的基础设施。像这样的琐碎代码:
<Control Foo="Text" FooExt.Bar="{Binding Text}" Grid.Column="0">
会变成这样难以理解的混乱:
var ctl = new Control();
ctl.BeginInit();
ctl.Foo = "Text";
var prop = FooExt.BarProperty;
var binding = new Binding("Text") { Source = dataContext };
BindingOperations.SetBinding(ctl, prop, binding);
Grid.SetColumn(ctl, 0);
ctl.EndEnit();
您不会喜欢编写此代码。 WPF旨在与XAML一起使用。
WPF并没有使用&#34; paint&#34;事件或类似的事情,在最低级别你&#34;画&#34;曾经,它被存储为矢量图像,框架在必要时负责重绘它。在更高级别,您添加控件,基元等,并更改其属性。同样,框架负责更新视图。在更高级别上,您只需创建用于创建控件的模型和规则,然后让框架完成剩下的工作。
WPF与&#34;传统&#34;完全不同。使用控件的方式。在提问之前,你应该阅读一本好书或至少几本完整的教程,因为你似乎并不了解基础知识。
答案 1 :(得分:1)
这不好玩,但是有可能在运行时完全构建Windows而无需XAML。
这是一个小例子:
与之通话:
{
CrisisWhatCrisis crisisWhatCrisis = new CrisisWhatCrisis();
crisisWhatCrisis.ShowDialog();
}
课程:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Test
{
public class CrisisWhatCrisis : Window
{
public Grid RootGrid { get; private set; }
public CrisisWhatCrisis()
{
this.WindowStyle = WindowStyle.ThreeDBorderWindow;
this.RootGrid = new Grid()
{ HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch };
// Create a sqare grid with 20 pixel borders
this.RootGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(20) });
this.RootGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(200) });
this.RootGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(50) });
this.RootGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(20) });
this.RootGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(20) });
this.RootGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(200) });
this.RootGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(20) });
// Create a new Textbox and place it in the middle of the root grid
TextBox TextBox_Test = new TextBox()
{ Text = "ABC", Background = Brushes.Yellow, HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Top };
Grid.SetColumn(TextBox_Test, 1);
Grid.SetRow(TextBox_Test, 1);
this.RootGrid.Children.Add(TextBox_Test);
Grid GridForButtons = new Grid()
{ HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch };
Button Button_Close = new Button() { Content = "Close" };
Button_Close.Click += Button_Close_Click;
// Add the button to the grid which has one cell by default
Grid.SetColumn(Button_Close, 0);
Grid.SetRow(Button_Close, 0);
GridForButtons.Children.Add(Button_Close);
// add the button grid to the RootGrid
Grid.SetRow(GridForButtons, 2);
Grid.SetColumn(GridForButtons, 1);
this.RootGrid.Children.Add(GridForButtons);
// Add the RootGrid to the content of the window
this.Content = this.RootGrid;
// fit the window size to the size of the RootGrid
this.SizeToContent = SizeToContent.WidthAndHeight;
}
private void Button_Close_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
}
答案 2 :(得分:0)
使用C#,您可以选择WPF,WinForm。如果你看到了xaml,那就是它的WPF。如果你想在后面的代码中创建窗口(而不是xaml),请执行以下操作。
MainWindow window = new MainWindow();
window.Show();
但我建议使用xaml,因为WPF提供了许多有用的方法。我推荐由Adam Nathan释放的wpf的书