转发控件的所有属性

问题描述 投票:4回答:2

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

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

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

提前致谢,

Mava卡。

vb.net winforms properties controls forwarding
2个回答
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>
© www.soinside.com 2019 - 2024. All rights reserved.