WPF学习笔记--XAML

XAML基础:

XAML是一种基于XML语法、专门用于表示一颗.NET对象树的语言。XAML文档中所有的元素都映射为一个.NET类的实例。

View Code
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        
    </Grid>
</Window>

  这是一个XAML的基本框架,文档中包含了两个元素,顶级的一个Window的元素,以及一个Grid的元素,Window元素代表整个窗口,Grid元素中可以放置各种控件,WPF只使用:Window元素、Page元素(该元素和Window元素类似,但可以用于导航的应用程序)、Application元素(该元素定义应用程序资源和启动设置)。

  上面的文档定义了2个命名空间,xmlns专门用于声明命名空间。第一个是WPF核心命名空间。第二个是XAML的命名空间,其中这个命名空间被映射为x。这样可以用这个前缀来使用这个命名空间。比如(<x:ElementName>)。

  当创建了一个WindowsApplication的程序,会有一个基本的框架类:

View Code
namespace WpfStudy {
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
        }
    }
}

  这个中间的InitializeComponent()方法,这是一个默认的构造函数,当创建类的一个实例时,就会调用此方法,从程序集中提取编译过的XAML,并用它构建用户界面。在类中经常希望通过代码来操作控件,则控件必须包含XAML Name特性。比如上面的Grid控件,需要通过选择该网格通过Properties设置,或直接<Grid x:Name="grid1"></Grid>来操作。这样就可以通过代码来操作这个Grid控件。

XAML属性:
View Code
<Grid>
    <TextBox Name="txtQuestion" VerticalAlignment="Stretch" 
                 HorizontalAlignment="Stretch" FontFamily="Verdana" FontSize="24" Foreground="Green">
    </TextBox>
    <Button Name="btnAnswer">
    </Button>
    <TextBox Name="txtAnsewer">
    </TextBox>
 </Grid>

可以在最基础的Grid中,添加了一个TextBox且设计了一些简单属性,在XML中这些都是一个纯文本的字符串,但对象属性可以是任何.NET类型,通过类型转换器来转换为特定的数据类型。

用类型转换器不能解决所有的问题,有些属性是完备的对象,这些对象具有自己的一系列属性。使得转换起来比较麻烦,容易出错。所以可以使用复杂属性:属性元素语法。例如Grid控件有一个Background属性,在该属性允许提供一个控制背景区域的画刷,但要是想用一个复杂的画刷,则添加一个Grid.Background的子标签。

下面这段代码就是使用了复杂属性,设置了一个渐变的Background。这样的使用比较简单。

View Code
 <Grid>
        <Grid.Background>
            <LinearGradientBrush>
                <LinearGradientBrush.GradientStops>
                    <GradientStop Offset="0.00" Color="Red" />
                    <GradientStop Offset="0.50" Color="Orange" />
                    <GradientStop Offset="1.00" Color="Yellow" />
                </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>
        </Grid.Background>
  </Grid>

  对于大多数的属性,上面2个属性可以工作的非常好,但是有些情况下,如希望将属性值设置为一个已经存在的对象,或者绑定到另一个控件来动态设置属性值。这样就需要用到标记扩展。标记扩展可用于潜逃标签或者XML特性中。当用于特性中,它们是被花括号{}来围起来。使用{标记扩展类 参数}的语法。所有标记扩展都继承自System.Window.Markup.MarkupExt-ention基类的类实现。例如可以像下面这样为Button.Foreground属性使用StaticExtension标记扩展:

View Code
    <Button>
        <Button.Foreground>
            <x:Static Member="SystemColors.ActiveCaptionBrush"></x:Static>
        </Button.Foreground>
    </Button>

  除了普通的属性外,还包含一个附加属性的概念,是可以用于多个控件但在另一个类中定义的属性。经常用于控件的布局。其工作原理为,每一个控件都有自己的固有属性。当在容器中放置一个控件时,根据容器的类型控件会获得额外的特征。这些附加的细节使用附加属性设置。附加属性总是使用两个部分的命名形式:定义类型.属性名。这样区分出附加属性和普通属性。通过附加属性可以再网格中的各个地方放置各种控件。如下面的代码就设置了一个两行三列的一个Grid,然后在想要放置的位置(Grid.Row="N" Grid.Column="N")放置了一个TextBox和两个Button:

View Code
 <Grid ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBox Margin="10" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3">This is a Test</TextBox>
        <Button Margin="10,10,2,10" Padding="3" Grid.Row="1" Grid.Column="1">OK</Button>
        <Button Margin="0,10,12,10" Padding="3" Grid.Row="1" Grid.Column="2" Width="48">Cancel</Button>
    </Grid>

但附加属性不是真正的属性,它们实际上被转换为方法调用。它们充当一个通用的可扩展系统。例如通过把ROW属性定义为一个附加属性,可以确保任何控件都可以使用它。另一个选择是将该属性作为基类的一部分。

  特殊字符以及空白字符的使用—在用XAML时,它受到XML的规则限制,一些如&、<>的字符。如果试图使用这些字符设置一个元素,就会遇到许多麻烦,所以只有使用实体引用来代替那些字符,才能正确的使用字符。 如:特殊字符小于号(<)转换为字符实体&lt; 大于号(>)转换为&gt; &符号(&)转换为&amp; 引号(")转换为&quot; 除了特殊字符,另一个问题是空白字符,如果希望在按钮文本中包含一系列空格。这时需要为元素使用xml:space="preserve"特性。就能够将元素内所有的空白字符保留下来。

  最后放一个完整的示例:

 

<Window x:Class="WPFTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="328" Width="412">
    <Grid Name="grid1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="132*" />
            <ColumnDefinition Width="95*" />
            <ColumnDefinition Width="163*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
            <Grid.Background>
            <LinearGradientBrush>
                <LinearGradientBrush.GradientStops>
                    <GradientStop Offset="0.00" Color="Red" />
                    <GradientStop Offset="0.50" Color="Indigo" />
                    <GradientStop Offset="1.00" Color="Violet" />
                </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>
        </Grid.Background>
        <TextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
                 Margin="10,10,13,10" Name="txtquestion" TextWrapping="Wrap" FontFamily="Verdana" 
                 FontSize="24" Grid.ColumnSpan="3">
            [Place question here.]
        </TextBox>
        <Button VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,0,0,0" 
                Width="127" Height="23" Name="cmdAnswer" Click="cmdAnswer_Click" Grid.ColumnSpan="2" Grid.Row="1">
            Ask the eight ball
        </Button>
        <TextBox VerticalAlignment="Stretch"  HorizontalAlignment="Stretch"
                 Margin="10,10,13,10" Name="txtAnswer" TextWrapping="Wrap" IsReadOnly="True"
                 FontFamily="Verdana" FontSize="24" Foreground="Green"
                 Grid.ColumnSpan="3" Grid.Row="2">
            [Answer will appear here.]
        </TextBox>
    </Grid>
</Window>

  

  

  

转载于:https://www.cnblogs.com/socialdk/archive/2012/05/13/2494823.html

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值