Pytanie w sprawie wpf, xaml, c# – Jak przypisać właściwość Uruchom do tekstu, programowo?

10

Wiem, że w XAML możemy zrobić ...

<TextBlock FontSize="18">
   This is my text <LineBreak/>
   <Run FontSize="24" FontWeight="Bold">My big bold text</Run>
</TextBlock>

Pytanie brzmi, jak mogę programowo przypisać Run do właściwości tekstowej (łańcuchowej)?

Twoja odpowiedź

1   odpowiedź
17

Jeśli na to spojrzyszTextBlock zobaczysz, że ContentProperty jest ustawione naInlines

[Localizability(LocalizationCategory.Text), ContentProperty("Inlines")]
public class TextBlock : FrameworkElement, ...

Oznacza to, że dodaszInline elementy do nieruchomościInlines za wszystko dodane między znacznikiem otwarcia i zamknięciaTextBlock.

Więc c # odpowiednikiem twojego Xamla jest

TextBlock textBlock = new TextBlock();
textBlock.FontSize = 18;
textBlock.Inlines.Add("This is my text");
textBlock.Inlines.Add(new LineBreak());
Run run = new Run("My big bold text");
run.FontSize = 24;
run.FontWeight = FontWeights.Bold;
textBlock.Inlines.Add(run);
Nie potrzeba dekompilatora, dokumentacja może ci to również powiedzieć (zarówno w postaci atrybutu, jak i prozy). svick
Przy okazji myślę, że jest to dobry przykład kodu, w którym inicjatory obiektów i kolekcji mogą uczynić go bardziej czytelnym. svick
Chodzi mi o to, że możesz spojrzeć na sekcję składni i zobaczyć[ContentPropertyAttribute]lub przeczytaj uwagi: „ATextBlock może zawierać ciąg w jegoText własność lubInline elementy treści przepływu […] w jegoInlines własność." svick
@svick: Również skorzystam z okazji, aby dowiedzieć się czegoś tutaj. Widzę to w MSDN, ale co miałeś na myśli przez atrybut lub prozę? Fredrik Hedblad
@svick: Bardzo prawda. Użyłem reflektora, aby móc go wkleić. Ale to z pewnością nie jedyny sposób, usunę tę część z odpowiedzi Fredrik Hedblad

Powiązane pytania