2009-04-09 15 views
16

Mam kontrolę użytkownika (poniżej), wiążę tekst do źródła danych i instancji do grupy kontroli użytkownika.Jak dopasować rozmiar tekstu do rozmiaru Silverlight?

Chcę, aby rozmiar tekstu był największy z możliwych, który będzie nadal mieścił się w granicach formantu. W programowaniu Windows mogłem zmierzyć rozmiar tekstu zmniejszając rozmiar czcionki, aż dopasuje się do wymiarów docelowych.

Czy jest jakiś sposób robienia tego w Silverlight?

Wiem, że I może prawdopodobnie zrobić to w podobny sposób, ale czy istnieją jakieś "milsze" sposoby robienia tego?

<Grid x:Name="gdBubble" Width="180" Height="95"> 
    <Ellipse x:Name="elBubble" Fill="#FFFFA300" /> 
    <TextBlock x:Name="txtContent" Text="{ Binding ClientName }" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
</Grid> 

[używam siatki tutaj, aby textblock do centrum poprawnie.]

Odpowiedź była tak bogata opisano użycie Viewbox.

To była zwycięska konfiguracja (dla mnie):

<Grid x:Name="gdBubble" Width="180" Height="95"> 
    <Ellipse x:Name="elBubble" Fill="#FFFFA300" /> 
    <controls:Viewbox Margin="10,10,10,10" VerticalAlignment="Stretch" Height="Auto"> 
     <TextBlock x:Name="txtContent" FontSize="18" Text="{ Binding ClientName }" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
    </controls:Viewbox> 
</Grid> 
+2

Jestem naprawdę zaskoczony, że nie znalazłem innych osób z tym problemem. Z pewnością każde powiązanie danych z dynamicznym źródłem danych zawierającym tekst ma ten problem? Czy po prostu przyciski tekstowe są używane do niestandardowych przycisków? –

Odpowiedz

21

Podobne pytanie zadawano wczoraj w sprawie automatycznego zmieniania rozmiaru treści w stosunku do wielkości kontenera. Odpowiedź w tym przypadku jest taka sama: skorzystaj z Viewbox. Jeśli umieścisz TextBlock wewnątrz Viewbox, TextBlock zmieni rozmiar tak, aby używał tylko potrzebnej przestrzeni, a Viewbox będzie obsługiwał rozciąganie tego do wymiarów kontenera. Użyj atrybutu rozciągania, aby wybrać jedną z czterech metod rozciągania.

Spójrz na tego wątku z wczoraj:

WPF Gui that changes size with window?

+0

Okazało się, że użyłem go niepoprawnie :) –

+0

Dobre rzeczy Bogaty, uratowałeś mnie w tyle. +1 :) :) –

0

Spróbuj Dockpanel zamiast siatki. Używanie LastChildFill = true powinno zapewnić ci zachowanie, którego szukasz.

+0

Jestem po wypełnieniu przez TextBlock WSZYSTKIE dostępne miejsce na wierzchu elipsy, używając DockPanel podzielę dostępny obszar między dwa. –

+0

Poza DockPanel nie rozszerzy rozmiaru czcionki do maksymalnego dozwolonego w dostępnej przestrzeni, nawet jeśli wymiary TextBlock powiększają się. Podejrzewam, że będzie to trudne ... –

+0

Jeśli zadokujesz elipsę na górnej stronie DockPanel, to nie powinna ona zmieniać rozmiaru. Jednak punkt Joanny na temat niezmiennego rozmiaru tekstu wciąż jest ważny. –

0

Pan spojrzał na przekształcać ScaleTransform?

ib.

+0

Chociaż może być przydatny do ręcznego zmieniania rozmiaru, nie sądzę, że jest to odpowiedź. –