我正在制作自定义控件(这就是我做的,我是主题设计师),而且我遇到了麻烦。 我正在制作的控件是一个自定义的RichTextBox控件。由于我想在RichTextBox周围使用自定义边框(圆角边),我只需要一个带有自定义边框的控件,以及一个实际上是普通RichTextBox的子控件。将BorderStyle设置为none,它看起来像这样:
现在,当然,parentcontrol需要拥有普通RichTextbox所具有的所有属性。 我手动完成了普通文本框的所有属性,但RichTextBox有更多属性,我问自己,有没有办法去转发"子控件的所有属性到主控件?
也许我有点奇怪地解释它。基本上,当您更改主控制"文本"属性RichTextBox的Text属性也应该改变。这意味着我必须为RichTextBox拥有的每个Property编写一个自定义事件,是否有办法自动为每个属性执行此操作?
提前致谢,
Mavamaarten。
答案 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>