/ / Przekaż wszystkie właściwości kontrolki - vb.net, winforms, właściwości, kontrolki, przekazywanie

Przekaż wszystkie właściwości kontrolki - vb.net, winformy, właściwości, sterowanie, przekazywanie

Wykonuję niestandardową kontrolę (właśnie to robię,Jestem projektantem tematycznym) i mam z czymś problem. Kontrolka, którą tworzę, jest niestandardową kontrolką RichTextBox. Ponieważ chcę niestandardową ramkę (zaokrąglone krawędzie) wokół RichTextBox, po prostu mam kontrolkę z niestandardowymi ramkami i kontrolkę podrzędną, która jest w rzeczywistości normalnym RichTextBox. Z ustawionym BorderStyle dla nikogo wygląda to tak:

Moja bogata kontrola pola tekstowego

Teraz oczywiście musi mieć kontrolę rodzicielskąwszystkie właściwości normalnego RichTextbox. Ręcznie zrobiłem wszystkie właściwości dla zwykłego pola tekstowego, ale RichTextBox ma znacznie więcej właściwości i zadałem sobie pytanie, czy jest jakiś sposób na „przekazanie” wszystkich właściwości elementu potomnego do elementu głównego?

Może tłumaczę to trochę dziwnie. Zasadniczo, gdy zmienisz właściwość „Text” kontrolki głównej, właściwość Text RichTextBox również powinna się zmienić. Oznacza to, że muszę napisać niestandardowe zdarzenie dla każdej właściwości RichTextBox, czy nie istnieje sposób, aby to zrobić automatycznie dla każdej właściwości?

Z góry dziękuję,

Mavamaarten.

Odpowiedzi:

1 dla odpowiedzi № 1

Okazuje się, że nie ma na to sposobu.


-1 dla odpowiedzi № 2

Uwaga: odpowiedziałem na to przed wysłany miał WinForms tag w swoim pytaniu. (Właściwie to dodałem go na podstawie jego odpowiedzi tutaj.) Mimo to, jeśli używasz WPF, to w ten sposób możesz to zrobić ...

Najłatwiej jest wymienićControlTemplate z wewnętrzną implementacją. Innymi słowy, „zastępujesz„ wizualne ”części kontrolki RichTextBox, ale nadal kontrolujesz RichTextBox.

Na przykład w ten sposób zastąpiłem elementy graficzneTextBoxa, aby całkowicie usunąć wszystkie chromy i pozostawić je z prostą ramką. Ale wciąż był to pełny TextBox ze wszystkimi właściwościami itp.

Ponownie sprawdź temat Templating Control. Możesz także poszukać „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>