4

我正在制作一个自定义控件(这就是我所做的,我是一名主题设计师)并且我遇到了一些问题。我正在制作的控件是一个自定义 RichTextBox 控件。因为我想在 RichTextBox 周围有一个自定义边框(圆边),所以我只需要一个带有自定义边框的控件和一个实际上是普通 RichTextBox 的子控件。将 BorderStyle 设置为 none 时,它​​看起来像这样:

我的富文本框控件

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

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

提前致谢,

玛瓦玛腾。

4

2 回答 2

1

事实证明没有办法做到这一点。

于 2013-04-07T19:09:39.147 回答
-1

注意:我在发布的问题中有WinForms标签之前回答了这个问题。(我实际上是根据他在这里的回复添加的。)不过,如果您使用的是 WPF,这就是您要这样做的方式......

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

例如,这就是我如何替换 TextBox 的视觉效果以完全去除所有 chrome 并使其只剩下一个简单的边框。但它仍然是一个具有所有属性等的完整文本框。

再次,查找控制模板。您可能还想搜索“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>
于 2013-03-25T21:36:20.190 回答