0

私は何かを見逃しているだけかもしれませんし、今日は私の日ではないかもしれませんが、私がやろうとしていることが失敗し続けています.

MyContentControl というカスタム コントロールがあります。次のようになります。

public class MyContentControl : ContentControl
{
    static MyContentControl()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MyContentControl), new FrameworkPropertyMetadata(typeof(MyContentControl)));
    }

    public DockPanel DifferentLook
    {
        get;
        set;
    }

    public string Txt
    {
        get;
        set;
    }

    protected override void OnInitialized(EventArgs e)
    {
        if (this.DifferentLook != null)
        {
            this.Content = this.DifferentLook;
        }

        Binding b = new Binding("Txt");
        b.Source = this;
        this.SetBinding(ContentProperty, b);
        base.OnInitialized(e);
    }
}

これがそのテーマです:

<Style TargetType="{x:Type local:MyContentControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyContentControl}">
                <Border Background="{TemplateBinding Background}" Margin="{TemplateBinding Padding}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        SnapsToDevicePixels="True">
                    <ContentPresenter VerticalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

これはメインウィンドウです:

<local:MyContentControl Txt="texty text">
    <local:MyContentControl.DifferentLook>
        <DockPanel>
            <TextBlock Text="Content = " DockPanel.Dock="Left"/>
            <ContentPresenter DockPanel.Dock="Left"/>
        </DockPanel>
    </local:MyContentControl.DifferentLook>
</local:MyContentControl>

「DifferentLook」が指定されていない場合、コントロールでデフォルトの ControlTemplate 内で定義された ContentPresenter を使用したいと考えています。

DifferentLook が設定されている場合は、コントロールを別の外観で表示する必要があります。

メソッド OnInitalized を参照してください。

問題は、DifferentLook を適用すると、DifferentLook.ContentPresenter が機能していないように見えることです。

DifferentLook.ContentPresenter がコンテンツを正しく適用しないのはなぜですか?

ウィンドウの出力は「texty text」ですが、「content = texty text」である必要があります。

編集:これはライト バージョンです。私はこれを作成し、問題を説明するために物事をできるだけ単純に保ちました. 実際には、カスタム コントロールは少し大きく、ユーザーは ControlTemlates をオーバーライドできない場合があります。

与えられた要件でこれを解決する方法を考えていますか?

4

1 に答える 1