作者常思考做一个APP需要了解哪些知识(作者是Android开发),琢磨一下,大概以下几点:
其实上面的思维定式用在C#开发使完全可行的,上面四点拆分下来还是挺多的,毕竟篇幅有限,所以标题命名为入门基础就不太妙了。
https://docs.microsoft.com/zh-cn/dotnet/api/index?view=netframework-4.7.2
搜素框输入命名控件+控件名
例:System.Windows.Documents.RUN
XAML有100行,直接粘过来,一行行分析
Memory: [empty]
**Window **
xmlns部分我们只需要关注以下几点
xmlns:local="clr-namespace:CalculatorDemo"//类似于Android的Style,不申明后面引用报错
Title="MainWindow"//标题
Height="350"//高度
Width="525"//宽度
xmlns我们也不会过多的纠结,固定写法。想了解的推荐下面这篇
WPF学习之X名称空间详解
DockPanel
类似于Android的FramLayout
Menu MenuItem
类似于Android的ToolBar
Grid
这个类似于Android的GridLayout
ShowGridLines:展示分割线
//2行3列
Button
TextBlock
类似于Android的TextView,不能编辑,可编辑的叫 :RichTextBox
//边距 左上右下
Margin="10,17,10,17"
// 所占格子数
Grid.ColumnSpan="2"
自定义控件
有了Window的xmlns申明(xmlns:x| xmlns:local) 这里就可以直接 alt +右键 提示出来
上面已经给出了三个提示的含义
现在转到CS文件
关于sealed ,partial,internal:比java会玩
readonly 和 const:const只能在初期就使用常量初始化好。对于每一次编译后的结果,const的值是固定的,而readonly的值是可以在运行的时候才确定值
public sealed 类可以在任何地方访问,不供派生调用,只能实例化.
sealed 或 internal sealed 类只能在当前项目中访问,不供派生调用,只能实例化.
partial:x:Class的值所指示的类型在声明的时候必须使用partial关键字
internal :在编程的时候,有的时候需要用一个程序集里的一个窗体元素访问到另一个程序集的窗体元素,那么就需要使用x:FieldModifier来改变变量的访问级别!
例子:
参考 WPF学习之X名称空间详解
定点击事件
双击XAML控件会自动生成点击事件哦,快去试试吧。
set,get方法
感觉比java要骚气的多啊
private string Display { get; set; }
数据绑定
不像Android 的findViewById 直接使用,不过现在的anko插件也支持了这种操作
private void UpdateDisplay()
{
DisplayBox.Text = Display == string.Empty ? "0" : Display;
}
数据类型操作
//使用ALT +Enter 自动生成
private string _memVal;
private double Memory
{
get
{
if (_memVal == string.Empty)
return 0.0;
//记住便是
return Convert.ToDouble(_memVal);
}
//set方法,InvariantCulture去除格式化
set { _memVal = value.ToString(CultureInfo.InvariantCulture); }
}
//字符串用‘+’拼接和java一样
_paper.AddArguments(LastValue + " / " + Display);
d = (Convert.ToDouble(LastValue)/Convert.ToDouble(Display));
//记住就行
if (double.IsNegativeInfinity(d) || double.IsPositiveInfinity(d) || double.IsNaN(d))
throw new Exception("Illegal value");
//非空判断
if (_memVal != string.Empty){}
//三目运算符
DisplayBox.Text = Display == string.Empty ? "0" : Display;
//获取角标元素
if (Display.IndexOf('.', 0) >= 0) return;
//获取字符串长度
var i = Display.Length;
//字符串移除
Display = Display.Remove(i - 1, 1); //remove last char
类似Android TextView的setText方法(其实更像kotlin)
_window.PaperBox.Text = string.Empty;
对话框
var parent = (Window) MyPanel.Parent;
MessageBox.Show(parent, parent.Title + " - By Jossef Goldberg ", parent.Title, MessageBoxButton.OK,
MessageBoxImage.Information);
退出
Close();
选中
StandardMenu.IsChecked = true;
本篇基于WPF开源项目 - CalculatorDemo
https://github.com/Microsoft/WPF-Samples
PS:个人不喜欢C#静态常量和函数,布局ID都用大写开头,你懂得。