缩放图像以使所有内容适合水平对齐的列表框

时间:2016-03-23 11:11:03

标签: c# wpf listview

我有一个水平的Listbox绑定到枚举,包括EnumToImageSource转换器工作,需要Listbox / view来获取selectedItem。

我需要列表框中的图像缩小其宽度,使其全部可见,即使在调整窗口大小时也不会出现水平滚动条。

this question中的解决方案仅适用于普通垂直列表视图。这甚至可以完成我想要存档的内容吗?

<ListBox HorizontalContentAlignment="Stretch" 
                         ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
                         ItemsSource="{Binding Source={StaticResource shoeValuesProvider}}">
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal"/>
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>

                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Image Source="{Binding Converter={StaticResource ShoeToImageConverter}}"/>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

1 个答案:

答案 0 :(得分:0)

感谢Sinatr的评论,我找到了确实使用UniformGrid定义了一行的解决方案,并将宽度设置为祖先ScrollContentPresenter,如上所述here

<StackPanel x:Name="ReferenceStackPanel">
            <ListBox HorizontalContentAlignment="Stretch" 
                         ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
                         SelectedItem="{Binding ShoeModel}" 
                         ItemsSource="{Binding Source={StaticResource shoeValuesProvider}}">
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid  Margin="0" Rows="1" Width="{Binding ActualWidth,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollContentPresenter}}}"></UniformGrid>
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Image Source="{Binding Converter={StaticResource ShoeToImageConverter}}"/>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </StackPanel>