1

私はこのコードビハインドを持つユーザーコントロールを持っています:

/// <summary>
/// The text to use for the header.
/// </summary>
public UIElement HeaderText
{
    get { return (UIElement) GetValue(HeaderTextProperty); }
    set { SetValue(HeaderTextProperty, value); }
}

public static DependencyProperty HeaderTextProperty =
    DependencyProperty.Register("HeaderText",
                                typeof(UIElement),
                                typeof(Panel),
                                new PropertyMetadata(null, new PropertyChangedCallback(HeaderTextPropertyChanged)));

private static void HeaderTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    var control = d as Panel;
    if (control != null)
    {
        control.HeaderText = (UIElement) e.NewValue;
    }
}

そして、この XAML:

<TextBlock Text="{TemplateBinding local:CustomPanel.HeaderText}" />

そして、私は次のようにユーザーコントロールを使用しようとしています:

<controls:CustomPanel>
    <controls:CustomPanel.HeaderText>
        <TextBlock Text="Foo " />
        <TextBlock Text="{Binding Bar}" />
        <TextBlock Text=" baz." />
    </controls:CustomPanel.HeaderText>
</controls:CustomPanel>

ただし、空白/空のテキストが表示されます。

コードビハインドに変更すれば動作させることができますがUIElement、両方受け入れたいと思っています。stringstringTextBlockUIElement

どうすればこれを達成できますか?

4

1 に答える 1

2

TextBlockコントロールでa を使用しないでくださいContentPresenter(および をバインドしますContent)。何でもホストできます。一貫性を保つために、プロパティ タイプobjectを作成し、名前を に変更します。Header

(補足として: 通常、 に付随する追加のプロパティHeader、つまり aHeaderTemplateと a がありHeaderTemplateSelectorます。 がテンプレートにある場合は、 を に設定することContentPresenterで 3 つのプロパティすべてにバインドできます) 。ContentSource"Header"

于 2012-06-02T23:02:01.017 に答える