Поведение Viewbox, которое я не могу понять - PullRequest
1 голос
/ 02 июня 2009

У меня есть DataTemplate, который используется в качестве логотипа для описания объекта Version. Логотип - это просто изображение и текст поверх него.

Я должен использовать DataTemplate в 2 местах: - как содержимое кнопки - В качестве миниатюры элемента ListBox

Дело в том, что логотип в ListBox должен быть намного меньше, чем в кнопке. Это не создает проблем для изображения логотипа, которое масштабируется автоматически. Но размеры шрифта не масштабируются автоматически.

Поэтому мне предложили использовать ViewBox в качестве родителя для всего описания XAML моего логотипа.

Вот шаблон данных:

        <DataTemplate DataType="{x:Type l:Version}">
            <Viewbox>
                <Grid Width="175">
                    <Image Source="{StaticResource Crate}"/>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>

                        <TextBlock Grid.Row="0" FontSize="18" Text="{Binding Type}" />
                        <TextBlock Grid.Row="1" FontSize="20" Text="{Binding Platform}" />
                        <TextBlock Grid.Row="2" FontSize="20" Text="{Binding ApprovedVersion}" />
                        <TextBlock Grid.Row="3" FontSize="16" Text="{Binding StringFormat=C\{0\}, Path=CodeChangeList}" />
                        <TextBlock Grid.Row="4" FontSize="16" Text="{Binding StringFormat=D\{0\}, Path=DataChangeList}" />
                        <TextBlock Grid.Row="5" FontSize="16" Text="{Binding StringFormat=S\{0\}, Path=SoundChangeList}" />
                    </Grid>
                </Grid>
            </Viewbox>
        </DataTemplate>

Затем я использую этот шаблон, просто изменив DataContext моей кнопки на объект Version. DataTemplate затем автоматически используется.

             <Button 
                x:Name="buttonVersion"
                Width="300"
                Height="300"
                Click="SelectVersionButton_Click"
                Background="Transparent"
                Content="{Binding}">
             </Button>

Почему мой логотип не заполняет всю кнопку? Ясно, что поля приходят из ниоткуда, и я не могу этого объяснить.

Что интересно, если я удалю Width = "175" из дочернего элемента Grid (дочернего элемента ViewBox), то ViewBox полностью заполнит кнопку. Однако , размеры шрифта моего логотипа больше не корректно масштабируются, так как эта ширина сетки похожа на «контрольный размер», который ViewBox должен использовать для надлежащего масштабирования остальных ...

Заранее спасибо

1 Ответ

1 голос
/ 03 июня 2009

Хорошо, вот как проблема была решена:

  1. Удалить ширину = 175 в сетке DataTemplate
  2. Отрегулируйте размеры шрифта снова

Размеры моего шрифта были скорректированы с учетом размера ящика 175x175. Размер ящика 256х256. Если вы не укажете Width = 175 в элементе Grid, кажется, что ViewBox вычислит соотношение благодаря исходному размеру изображения (256x256). Кроме того, кнопка 300x300 теперь полностью заполнена изображением ящика благодаря ViewBox, и размеры шрифта соответственно увеличены.

Итак, на шаге 2 мне пришлось настроить размеры шрифта для изображения 256x256, а не для изображения 175x175.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...