首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

How to inherit XAML style and override property of child element

2012-08-24 
How to inherit XAML style and override property of child element?The questionhow to inherit XAML st

How to inherit XAML style and override property of child element?

The question


how to inherit XAML style and override some the property of the child element/

the problem

there is a very good question indeed, times are you need to define a base button that you want the derived classs to override.?

?

This article is about the principle tha how you can override the style inherited from the base style.

?

?


the solution

It is more a best practise/guide rather than the solutoin, there is a good artile on on this discussion on the stackoverlow already, so that yoy might have a look here.?

?


the note "The standard approach to making a customizable control template is to use TemplateBinding in the template to?bind to properties ?of the control, and then to set those properties in the child styles."

?

?

and here ist one of the example that you can find the stackoverflow forum.

?

?

<StackPanel>    <StackPanel.Resources>        <Style x:Key="BaseButtonStyle" TargetType="Button">            <Setter Property="Template">                <Setter.Value>                    <ControlTemplate TargetType="Button">                        <Border                            BorderBrush="{TemplateBinding BorderBrush}"                            BorderThickness="{TemplateBinding BorderThickness}"                            Background="{TemplateBinding Background}">                            <ContentPresenter/>                        </Border>                    </ControlTemplate>                </Setter.Value>            </Setter>        </Style>        <Style x:Key="BlueButtonStyle" TargetType="Button"               BasedOn="{StaticResource BaseButtonStyle}">            <Setter Property="Background" Value="Blue"/>        </Style>        <Style x:Key="RedButtonStyle" TargetType="Button"               BasedOn="{StaticResource BaseButtonStyle}">            <Setter Property="Background" Value="Red"/>        </Style>    </StackPanel.Resources>    <Button Style="{StaticResource RedButtonStyle}">Red</Button>    <Button Style="{StaticResource BlueButtonStyle}">Blue</Button></StackPanel>
?

?

?

?

The note:?

Below is a more elaborated example of how you can overrid the style to make the togglebutton to have different image depending on the IsChecked status.

?

?

<Style x:Key="_icoToggleButton"           BasedOn="{x:Null}"           TargetType="{x:Type ToggleButton}">    <Style.Resources>      <BitmapImage x:Key="_imageOnSource"                   UriSource="pack://application:,,,/Resources/Images/excel_icon.gif" />      <BitmapImage x:Key="_imageOffSource"                         UriSource="pack://application:,,,/Resources/Images/refresh.PNG" />    </Style.Resources>    <Setter Property="Template">      <Setter.Value>        <ControlTemplate TargetType="{x:Type ToggleButton}">          <Grid>            <Image Margin="2,2,2,2"                           x:Name="image"                    Source="{DynamicResource _imageOnSource}"                         />          </Grid>          <ControlTemplate.Triggers>            <Trigger Property="IsChecked" Value="True">                    <Setter TargetName="image" Property="Source" Value="{DynamicResource _imageOnSource}" />                    <Setter Property="ToolTip" Value="Click to Turn Off Auto Sorted/Filtered/Grouped by Fields" />                  </Trigger>                  <Trigger Property="IsChecked" Value="False" >                    <Setter TargetName="image" Property="Source" Value="{DynamicResource _imageOffSource}" />                    <Setter Property="ToolTip" Value="Click to Turn On Auto Sorted/Filtered/Grouped by Fields" />                  </Trigger>                   <Trigger Property="IsChecked" Value="{x:Null}" >                    <Setter TargetName="image" Property="Source" Value="{DynamicResource _imageOnSource}" />                    <Setter Property="ToolTip" Value="Click to Turn On Auto Sorted/Filtered/Grouped by Fields" />            </Trigger>            <Trigger Property="IsFocused"                         Value="True" />            <Trigger Property="IsMouseOver"                         Value="True">              <Trigger.EnterActions>                <BeginStoryboard Storyboard="{StaticResource _iconOverStoryboard}"                                     x:Name="_iconOverStoryboard_BeginStoryboard" />              </Trigger.EnterActions>              <Trigger.ExitActions>                <BeginStoryboard Storyboard="{StaticResource _iconAwayStoryboard}"                                     x:Name="_iconAwayStoryboard_BeginStoryboard" />              </Trigger.ExitActions>            </Trigger>            <Trigger Property="IsPressed"                         Value="True">              <Trigger.EnterActions>                <BeginStoryboard Storyboard="{StaticResource _iconPressStoryboard}"                                     x:Name="_iconPressStoryboard_BeginStoryboard" />              </Trigger.EnterActions>              <Trigger.ExitActions>                <BeginStoryboard Storyboard="{StaticResource _iconReleaseStoryboard}"                                     x:Name="_iconReleaseStoryboard_BeginStoryboard" />              </Trigger.ExitActions>            </Trigger>            <Trigger Property="IsEnabled"                         Value="False" />          </ControlTemplate.Triggers>        </ControlTemplate>      </Setter.Value>    </Setter>  </Style>

?

?

?

Then you can define a child style as such.

?

?

?

<Style x:Key="_customizedIcoToggleButton"           BasedOn="{StaticResource _customizedIcoToggleButton}"           TargetType="{x:Type ToggleButton}">    <Style.Resources>      <BitmapImage x:Key="_imageOnSource"                   UriSource="pack://application:,,,/Resources/Images/automatic.gif" />      <BitmapImage x:Key="_imageOffSource"                         UriSource="pack://application:,,,/Resources/Images/manua.PNG" />    </Style.Resources>    </Style>

?

?

?

the new style "_customizedIcoToggleButton" now have a different images for on/off status.

?

热点排行