Как у вас Silverlight изменить размер текстового содержимого, чтобы соответствовать? - PullRequest
16 голосов
/ 09 апреля 2009

У меня есть пользовательский элемент управления (ниже), я связываю текст с источником данных и создаю кучу пользовательских элементов управления.

Я хочу, чтобы размер текста был максимально большим, и он все равно будет вписываться в границы элемента управления. В программировании Windows я мог измерять размер текста, уменьшая размер шрифта, пока он не соответствовал целевым размерам.

Есть ли способ сделать это в Silverlight?

Я знаю, что мог бы предположительно сделать это подобным образом, но есть ли более "хорошие" способы сделать это?

<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>

[Я использую сетку для правильного центрирования текстового блока.]

Ответ был таким, как Рич описал использование Viewbox.

Это была выигрышная конфигурация (для меня):

<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>

Ответы [ 3 ]

21 голосов
/ 09 апреля 2009

Вчера был задан похожий вопрос о автоматическом изменении размера содержимого относительно размера контейнера. Ответ в этом случае тот же: используйте Viewbox. Если вы поместите ваш TextBlock внутри Viewbox, TextBlock изменит свой размер, чтобы использовать только необходимое ему пространство, а Viewbox будет обрабатывать растяжение до размеров контейнера. Используйте атрибут stretch, чтобы выбрать один из четырех методов растяжения.

Взгляните на эту ветку со вчерашнего дня:

WPF Gui, который изменяет размер с окном?

0 голосов
/ 09 апреля 2009

Вы смотрели в Transform ScaleTransform?

И.Б..

0 голосов
/ 09 апреля 2009

Попробуйте Dockpanel вместо сетки. Использование LastChildFill = true должно дать вам поведение, которое вы ищете.

...