WPF で Button から派生するカスタム コントロールを作成しました。DefaultStyleKeyProperty をオーバーライドしてから、Content の依存関係プロパティを設定しました。このコントロールには、OnMouseEnter、OnMouseLeave、OnMouseDown、および OnMouseUp の独自のスタイルがあります。使用すると、イベントとカスタマイズされたスタイルが表示されますが、コンテンツは表示されません。コンテンツを設定するにはどうすればよいですか?
コントロールのコードは次のとおりです。
public class SymbolButton : Button
{
public static readonly DependencyProperty ContentProperty;
static SymbolButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(SymbolButton), new FrameworkPropertyMetadata(typeof(SymbolButton)));
FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata();
metadata.AffectsArrange = true;
ContentProperty = DependencyProperty.Register("Content",
typeof(string), typeof(SymbolButton), new UIPropertyMetadata(null));
}
Point startPoint = new Point(0.5, 0);
Point endPoint = new Point(0.5, 1);
public string Content
{
get { return (string)GetValue(ContentProperty); }
set { SetValue(ContentProperty, value); }
}
public SymbolButton()
{
//this.Content = "Symbol";
ButtonDefaultDisplay();
this.BorderThickness = new Thickness(3.3);
this.FontSize = 21;
this.FontStyle = FontStyles.Oblique;
}
private void ButtonDefaultDisplay()
{
this.Foreground = Brushes.BlueViolet;
this.Background = new LinearGradientBrush(Colors.LightBlue,
Colors.MediumAquamarine,
startPoint, endPoint);
this.BorderBrush = Brushes.DarkTurquoise;
}
private void ButtonClickDisplay()
{
this.Foreground = Brushes.LightCyan;
this.Background = new LinearGradientBrush(Colors.MidnightBlue,
Colors.DarkTurquoise,
startPoint, endPoint);
this.BorderBrush = Brushes.Cyan;
}
private void ButtonHighlight()
{
this.Foreground = Brushes.Red;
this.Background = new LinearGradientBrush(Colors.MistyRose,
Colors.LightBlue,
endPoint, startPoint);
this.BorderBrush = Brushes.Plum;
}
protected override void OnMouseDown(MouseButtonEventArgs e)
{
ButtonClickDisplay();
}
protected override void OnMouseUp(MouseButtonEventArgs e)
{
ButtonHighlight();
}
protected override void OnMouseEnter(MouseEventArgs e)
{
ButtonHighlight();
}
protected override void OnMouseLeave(MouseEventArgs e)
{
ButtonDefaultDisplay();
}
}