4

私はカスタムコントロールを作成しています(それが私が行っていることです。私はテーマデザイナーです)。何か問題が発生しています。私が作成しているコントロールは、カスタムのRichTextBoxコントロールです。RichTextBoxの周囲にカスタムの境界線(丸みを帯びたエッジ)が必要なので、カスタムの境界線を持つコントロールと、実際には通常のRichTextBoxである子コントロールがあります。BorderStyleをnoneに設定すると、次のようになります。

私のリッチテキストボックスコントロール

もちろん、parentcontrolには、通常のRichTextboxが持つすべてのプロパティが必要です。通常のテキストボックスのすべてのプロパティを手動で実行しましたが、RichTextBoxにははるかに多くのプロパティがあり、子コントロールのすべてのプロパティをメインコントロールに「転送」する方法はありますか?

多分私はそれを少し奇妙に説明しています。基本的に、メインコントロールの「Text」プロパティを変更すると、RichTextBoxのTextプロパティも変更されます。これは、RichTextBoxが持つすべてのプロパティに対してカスタムイベントを作成する必要があることを意味しますが、すべてのプロパティに対してこれを自動的に行う方法はありませんか?

前もって感謝します、

Mavamaarten。

4

2 に答える 2

1

これを行う方法はありません。

于 2013-04-07T19:09:39.147 に答える
-1

注:投稿にWinFormsタグが含まれる前に、これに回答しました。(実際には、ここでの彼の返信に基づいて追加しました。)それでも、WPFを使用している場合は、これがその方法です...

最も簡単な方法は、ControlTemplateを内部実装に置き換えることです。つまり、RichTextBoxコントロールの「ビジュアル」部分を置き換えていますが、それでもRichTextBoxコントロールです。

たとえば、これは、TextBoxのビジュアルを置き換えて、すべてのクロムを完全に取り除き、単純な境界線だけを残す方法です。しかし、それでもすべてのプロパティなどを含む完全なTextBoxでした。

もう一度、コントロールテンプレートを検索します。「LooklessControls」を検索することもできます。

<Style TargetType="{x:Type glc:EditableTextBlock2}" BasedOn="{StaticResource {x:Type TextBox}}">

    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="MinWidth" Value="20" />

    <Setter Property="Template">
        <Setter.Value>

            <ControlTemplate TargetType="{x:Type glc:EditableTextBlock2}">

                <Border Name="Bd"
                    SnapsToDevicePixels="True"
                    BorderThickness="1"
                    BorderBrush="{TemplateBinding Border.BorderBrush}"
                    Background="{TemplateBinding Border.Background}" >

                    <ScrollViewer Name="PART_ContentHost"
                        SnapsToDevicePixels="True"
                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />

                </Border>

            </ControlTemplate>

        </Setter.Value>
    </Setter>

</Style>
于 2013-03-25T21:36:20.190 に答える