Completing a WPF To-Do List Application - Stylizing the application, continued
(Page 4 of 5 )
This problem is easily fixed, thankfully. Just as, in C#, one class can inherit from another, so too, in XAML, can one style inherit from another. The default button style was defined at the application level. However, any other definitions at a lower level (at the window level or the layout level—it's also possible to give, for example, a Grid its own resources) will take precedence. When we do define a new style, we can re-use elements from another style so that the properties don't all have to be redefined. First, though, the button style that we just created will need to have an identifier:
<Style x:Key="orangeButtonStyle" TargetType="{x:Type Button}">
The dialog window will need its own Resources section in AddTaskDialog.xaml:
<Window.Resources>
</Window.Resources>
Inside this section, we can create a new style which is based on the other one and will only apply to buttons within the dialog:
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource orangeButtonStyle}">
<Setter Property="FontSize" Value="11" />
</Style>
The font size now fits the small size of the button.
Notice that this creates another problem, however. When the first style is given an identifier, it ceases to be the default style automatically applied to everything. It is possible, though, to explicitly apply a style to a control:
<Button Name="AddButton" Grid.Row="1" Grid.Column="0" Margin="0,3,2,0" Content="Add Task" Click="AddButton_Click" Style="{StaticResource orangeButtonStyle}" />
<Button Name="DeleteButton" Grid.Row="1" Grid.Column="1" Margin="2,3,0,0" Content="Delete Task" Click="DeleteButton_Click" Style="{StaticResource orangeButtonStyle}" />
Still, a neater, more practical solution would just be to inherit from orangeButtonStyle in the main window itself:
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource orangeButtonStyle}" />
Next: Finishing Up >>
More Windows Scripting Articles
More By Peyton McCullough