Поведение Viewbox, которое я не могу понять

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

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

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

Поэтому мне предложили использовать 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. Удалить ширину =175 в сетке DataTemplate
  2. Отрегулируйте размеры шрифта снова

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

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

Другие вопросы по тегам