1.控件样式
例如: <Style TargetType="ListBoxItem">
<Setter Property="Background"
Value="Transparent" />
<Setter Property="HorizontalContentAlignment"
Value="Stretch" />
<Setter Property="Padding"
Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid Background="{TemplateBinding Background}">
<ContentControl x:Name="contentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Foreground="{TemplateBinding Foreground}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
ControlTemplate下的元素使用TemplateBinding进行绑定和Template平级的属性,例如:
<ContentControl Margin="{TemplateBinding Padding}" />
TemplateBinding 绑定外部的元素属性为 <Setter Property="Padding" Value="0" />
好处在于控件更加灵活,因为Padding为Dependency属性,可以在控件中直接设置该属性,可以满足多处使用只有Margin不同的其他元素相同的ListBox控件。
2.StaticResource和DynamicResource 的理解 一个静态资源一个动态资源 引用style使用
3.Binding有两种方式 一个是Source 另外一个Relativesource
总结一下Relativesource:使用场合,目标对象绑定到和目标对象自身有关关系的对象上,这时候需要用到相对数据源扩展。
涉及到目标对象间的绑定,容易想到TemplateBinding ,他们之间的区别为TemplateBinding 绑定的是外部的样式的控制,而Relativesource是Binding的数据
4.Navigate框架
注意:导航的是Page而不是Usercontrol,并且该Page导航页面切换时只运行一次构造函数,但是却每次都运行Loaded函数