Масштабирование изображений в WPF ListBox - PullRequest
0 голосов
/ 27 января 2012

Я начал разрабатывать свой код на примере SO WPF: размещение элементов коллекции в сетке . Теперь, чтобы получить возможность выбора ячеек, я переименовал каждый ItemsControl в ListBox, потому что ListBox - это -A ItemsControl (XAMl несколько упрощенный):

<ListBox  HorizontalContentAlignment="Stretch"  VerticalContentAlignment="Stretch" ItemsSource="{Binding YourItems}"> 
<ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
        <Grid/> 
    </ItemsPanelTemplate> 
</ListBox.ItemsPanel> 
<ListBox.ItemContainerStyle> 
    <Style> 
        <Setter Property="Grid.Column" Value="{Binding X}"/> 
        <Setter Property="Grid.Row" Value="{Binding Y}"/> 
    </Style> 
</ListBox.ItemContainerStyle> 
       <ListBox.ItemTemplate>
            <DataTemplate>
                <Image RenderOptions.BitmapScalingMode="LowQuality" Source="{Binding  ...ImageSource, Mode=OneWay}">
                </Image>
            </DataTemplate>
        </ListBox.ItemTemplate>

Сетка заполнена тестовой картиной глифа, основанной на коде здесь .

Удивительно, но это сработало. Подбор работ. Однако в случае ItemsControl полоса прокрутки отсутствовала. Все хорошо масштабируется. Когда я уменьшил размер окна, ячейки сетки сократились, как и изображения. Когда я увеличил окно, все увеличилось.

Теперь с ListBox это не так. Размер изображения остается неизменным. Если окно недостаточно велико, имеется горизонтальная полоса прокрутки, а когда окно недостаточно велико, некоторые изображения скрыты, и пользователь должен прокрутить вправо.

Итак, мой вопрос: Если ListBox - это ItemControl, почему мои изображения не масштабируются одинаково? Что я должен сделать, чтобы исправить это?

1 Ответ

1 голос
/ 27 января 2012

Это потому, что ListBox и ItemsControl используют разные стили.Вы можете легко применить стиль элемента управления по умолчанию к вашему ListBox:

<ListBox Style="{StaticResource ResourceKey={x:Type ItemsControl}}">
...