XAML에서 다음과 같은 기본 자료 Style
을 얻었습니다. 새로운 스타일마다 각각 다른 속성을 가진 새로운 스타일을 만들어야합니다.XAML에서 스타일 설정
<UserControl.Resources>
<Style x:Key="BaseButtonStyle" TargetType="{x:Type ButtonBase}">
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Background" Value="{StaticResource Button.Background}"/>
<Setter Property="BorderBrush" Value="{StaticResource Button.BorderBrush}"/>
<Setter Property="Foreground" Value="{StaticResource Button.Foreground}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="10,1,10,1"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ButtonBase}">
<Grid x:Name="Root" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
<Grid x:Name="FocusState" Opacity="0">
<Border CornerRadius="4" Style="{StaticResource FocusTemplate}"/>
</Grid>
<Grid x:Name="DefaultState">
<Border Background="{StaticResource Button.DefaultState.Border1}"
Padding="1" CornerRadius="3">
<Border Background="{StaticResource Button.DefaultState.Border2}"
Padding="1" CornerRadius="2">
</Border>
</Border>
</Grid>
<Grid x:Name="HoverState" Opacity="0">
<Border Background="{StaticResource Button.HoverState.Border1}"
Padding="1" CornerRadius="3">
<Grid>
<Border Background="{StaticResource Button.HoverState.Border2}"
Padding="1" CornerRadius="2">
<Border Background="{StaticResource Button.HoverState.Border3}"
CornerRadius="1"/>
</Border>
<Border>
<Border.Background>
<RadialGradientBrush>
<RadialGradientBrush.RelativeTransform>
<TranslateTransform X="0" Y="0.5"/>
</RadialGradientBrush.RelativeTransform>
<GradientStop Color="#00FFFFFF" Offset="1"/>
<GradientStop Color="#BFFFFFFF" Offset="0"/>
</RadialGradientBrush>
</Border.Background>
</Border>
</Grid>
</Border>
</Grid>
<Grid x:Name="PressedState" Opacity="0">
<Border Background="{StaticResource Button.PressedState.Border1}"
Padding="1" CornerRadius="3">
<Border Background="{StaticResource Button.PressedState.Border2}"
Padding="1" CornerRadius="2">
<Border Background="{StaticResource Button.PressedState.Border3}"
CornerRadius="1"/>
</Border>
</Border>
</Grid>
<Grid x:Name="CheckedState" Opacity="0">
<Border Background="{StaticResource Button.CheckedState.Border1}"
Padding="1" CornerRadius="3">
<Border Background="{StaticResource Button.CheckedState.Border2}"
Padding="1" CornerRadius="2">
<Border Background="{StaticResource Button.CheckedState.Border3}"
CornerRadius="1"/>
</Border>
</Border>
</Grid>
<Grid Margin="2">
<ContentPresenter Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Grid>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="DefaultState" Property="Opacity" Value="0"/>
<Setter TargetName="HoverState" Property="Opacity" Value="1"/>
<Setter TargetName="PressedState" Property="Opacity" Value="0"/>
<Setter TargetName="CheckedState" Property="Opacity" Value="0"/>
<Setter Property="Foreground"
Value="{StaticResource Button.Foreground}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="DefaultState" Property="Opacity" Value="0"/>
<Setter TargetName="HoverState" Property="Opacity" Value="0"/>
<Setter TargetName="PressedState" Property="Opacity" Value="1"/>
<Setter TargetName="CheckedState" Property="Opacity" Value="0"/>
<Setter Property="Foreground"
Value="{StaticResource Button.Foreground}"/>
</Trigger>
<Trigger Property="ToggleButton.IsChecked" Value="True">
<Setter TargetName="DefaultState" Property="Opacity" Value="0"/>
<Setter TargetName="HoverState" Property="Opacity" Value="0"/>
<Setter TargetName="PressedState" Property="Opacity" Value="0"/>
<Setter TargetName="CheckedState" Property="Opacity" Value="1"/>
<Setter Property="Foreground"
Value="{StaticResource Button.Foreground}"/>
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter TargetName="FocusState" Property="Opacity" Value="1"/>
</Trigger>
<Trigger Property="Button.IsDefaulted" Value="True">
<Setter TargetName="FocusState" Property="Opacity" Value="1"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Root" Property="Opacity" Value="0.35"/>
<Setter Property="Foreground"
Value="{StaticResource Button.Foreground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<UserControl.Resources>
와 나는 지금까지 너무 좋아
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource BaseButtonStyle}"/>
를 사용하여 기본 버튼 스타일로 설정하십시오. 다음으로이되는 다른 유일한 부분과 두 번째 스타일을 갖고 싶어
<Border Background="{StaticResource Button.DefaultState.BorderNEWZ}"
//instead of
<Border Background="{StaticResource Button.DefaultState.Border2}"
그래서 ... NEWSTYLETEST을 시도했습니다
<Style x:Key="NEWSTYLETEST" TargetType="{x:Type Button}" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ButtonBase}">
<Grid x:Name="Root" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
<Grid x:Name="FocusState" Opacity="0">
<Border CornerRadius="4" Style="{StaticResource FocusTemplate}"/>
</Grid>
<Grid x:Name="DefaultState">
<Border Background="{StaticResource Button.DefaultState.Border1}"
Padding="1" CornerRadius="3">
<Border Background="{StaticResource Button.DefaultState.BorderNEWZ}"
Padding="1" CornerRadius="2">
</Border>
</Border>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
이 내가 Button.DefaultState.Border2
에서 Button.DefaultState.BorderNEWZ
에 필요한 제어 부분을 변경하지 않습니다하지만, 기본 스타일의 <Setter Property="Template">
나머지 부분에 포함 된 나머지 값을 생략합니다.
매번 <Setter Property="Template">
전체를 복사하여 필요한 라인을 변경할 수는 있지만 지나친 것 같습니다. Button.DefaultState.Border2
을 목표로하는 방법은 있습니까? 코드의 큰 덩어리를 반복하지 않고 다른 모든 것을 똑같이 유지하면서 새로운 스타일을 변경하려면 어떻게해야합니까?