Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
Chào mọi người, mình có Custom lại Button WPF, nhưng bị dính lỗi không Update khi mình thay đổi Style của nó, phải chạy lại mới được. Bên dưới là Code của mình, các bạn xem giúp mình với.
Template của Button
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Class Button
public class ButtonAssist : Button
{
public static readonly DependencyProperty CornerRadiusKey =
DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(ButtonAssist), new PropertyMetadata(new CornerRadius(5)));
public CornerRadius CornerRadius
{
get { return (CornerRadius)GetValue(CornerRadiusKey); }
set { SetValue(CornerRadiusKey, value); }
}
}
Style của Button
<Style x:Key="Mybutton" TargetType="local:ButtonAssist" BasedOn="{StaticResource ButtonAss}">
<Setter Property="CornerRadius" Value="20"/>
</Style>
Class Button
Bạn sửa như trên là được nhé! Lý do là vì thằng DependencyProperty này bắt buộc hậu tố của nó phải có từ Property nhưng bạn lại viết là Key nên nó lỗi.