プロパティ値の継承を使用して添付プロパティを作成し、それをカスタムコントロール(コンストラクターなど)に適用できます。アタッチされたプロパティは、ターゲットオブジェクトがTextBlockである場合は常に、その値をターゲットオブジェクトにコピーします。
public class CustomControl : ContentControl
{
public CustomControl()
{
SetTextTrimming(this, TextTrimming.CharacterEllipsis);
}
public static readonly DependencyProperty TextTrimmingProperty =
DependencyProperty.RegisterAttached(
"TextTrimming", typeof(TextTrimming), typeof(CustomControl),
new FrameworkPropertyMetadata(
default(TextTrimming),
FrameworkPropertyMetadataOptions.Inherits,
TextTrimmingPropertyChanged));
public static TextTrimming GetTextTrimming(DependencyObject obj)
{
return (TextTrimming)obj.GetValue(TextTrimmingProperty);
}
public static void SetTextTrimming(DependencyObject obj, TextTrimming value)
{
obj.SetValue(TextTrimmingProperty, value);
}
private static void TextTrimmingPropertyChanged(
DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
var textBlock = obj as TextBlock;
if (textBlock != null)
{
textBlock.TextTrimming = (TextTrimming)e.NewValue;
}
}
}
TextTrimming
派生コントロールクラスでこのアタッチされたプロパティを定義する必要はないことに注意してください。DependencyObjectから派生する必要さえない特別なヘルパークラスで定義することもできます。
このプロパティは、ビジュアルツリーでTextBoxを使用する他のコントロール(標準のContentControlなど)でも正常に機能します。
<ContentControl local:CustomControl.TextTrimming="WordEllipsis"
Content="Some sample text to be trimmed"/>