转发控件的所有属性

时间:2013-02-08 17:39:17

标签: vb.net winforms properties controls forwarding

我正在制作自定义控件(这就是我做的,我是主题设计师),而且我遇到了麻烦。 我正在制作的控件是一个自定义的RichTextBox控件。由于我想在RichTextBox周围使用自定义边框(圆角边),我只需要一个带有自定义边框的控件,以及一个实际上是普通RichTextBox的子控件。将BorderStyle设置为none,它看起来像这样:

My rich textbox control

现在,当然,parentcontrol需要拥有普通RichTextbox所具有的所有属性。 我手动完成了普通文本框的所有属性,但RichTextBox有更多属性,我问自己,有没有办法去转发"子控件的所有属性到主控件?

也许我有点奇怪地解释它。基本上,当您更改主控制"文本"属性RichTextBox的Text属性也应该改变。这意味着我必须为RichTextBox拥有的每个Property编写一个自定义事件,是否有办法自动为每个属性执行此操作?

提前致谢,

Mavamaarten。

2 个答案:

答案 0 :(得分:1)

原来没有办法做到这一点。

答案 1 :(得分:-1)

  

注意:我在之前回答了 帖子在他们的问题中有 WinForms 标记。 (我实际上根据他在这里的回复添加了它。)不过,如果你正在使用WPF,这就是你要做的...

最简单的方法是将ControlTemplate替换为内部实现。换句话说,您正在替换RichTextBox控件的“可视”部分,但您仍然是RichTextBox控件。

例如,这就是我取代TextBox的视觉效果以完全剥离掉所有chrome的方式,并且只留下一个简单的边框。但它仍然是一个包含所有属性等的完整TextBox。

再次,查找控制模板。您可能还想搜索“Lookless Controls”。

<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>