理解Styles和ControlTemplates
理解ResourceDictionaries
理解使用者自訂控制項
ControlTemplate從Control繼承 而Control中有Template屬性
定義ControlTemplate有三種方式:
內聯定義:
<ToolTip>
<ToolTip.Template>
<ControlTemplate TargetType=”ToolTip>
………
</ControlTemplate>
</ToolTip.Template>
</ToolTip>
資源引用:
<UserControl.Resources>
<ControlTemplate x:Key=”tooltip” TargetType=”ToolTip”>
…….
</ControlTemplate>
</UserControl.Resources>
<Grid x:Name=”LayoutRoot” Background=”White”>
<ToolTip>
<ToolTip.Template>
<StaticResources ResourceKey=”toolTip”/>
</ToolTip.Template>
</ToolTip>
</Grid>
樣式引用 :(常用方式)
<UserControl.Resources>
<ControlTemplate x:Key=”tooltip” TargetType=”ToolTip”>
<Setter Property=”Template”>
<Setter.Value>
<ControlTemplate TargetType=”ToolTip”>
</ControlTemplate>
</Setter.Value>
</Setter>
</ControlTemplate>
</UserControl.Resources>
<ToolTip Style=”{StaticResource toolTip}”/>
DataPicker的浮水印處理
public class MyDatePicker : DatePicker
{
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var datePickerTextBox = GetTemplateChild("TextBox") as DatePickerTextBox;
datePickerTextBox.Watermark = "選擇日期....";
datePickerTextBox.TextChanged += datePickerTextBox_TextChanged;
}
private void datePickerTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
var datePickerTextBox = GetTemplateChild("TextBox") as DatePickerTextBox;
datePickerTextBox.Watermark = "選擇日期...";
}
}
FallbackValue屬性:
<TextBlock Text=”{Binding Path=Name, FallbackValue=’無效值’}”/>
當繫結來源不存在Name屬性時,TextBlock就會顯示無效值
<TextBlock Text=”{Binding Path=Data,StringFormat=’Now is \{0:yyyy-M-dd}’}”/>
園子裡面看到統一設定樣式的文章,感覺沒有CSS來的方便,可能是剛入門還沒有找到有效方法。<Application.Resources>
<!-- 統一設定按鈕樣式 TargetType應用的類型 x:Key 名稱 -->
<!-- 引用方式: Style=" { StaticResource ButtonStyle }" -->
<Style TargetType="Button" x:Key="ButtonStyle">
<Setter Property="Background" Value="Red"></Setter>
<Setter Property="Height" Value="50"/>
<Setter Property="Width" Value="100"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FontSize" Value="16"/>
</Style>
</Application.Resources>