如何根据窗口大小显示图像?

时间:2014-01-22 18:50:51

标签: c# .net wpf image xaml

enter image description here

我有一个333x 344像素的图像,我在WPF中显示,它总是显示相同的大小,而不管窗口的大小。 图像位于dockpanel内,但将dockpanel更改为grid并没有帮助。

我怎样才能与窗户的大小成比例?

<Window>
<ScrollViewer>
<ItemSontrol>
<Usercontrol>
<Grid>
<DockPanel>
<Image/>
</DockPanel>
</Grid>
</Usercontrol>
</ItemSontrol>
</ScrollViewer>
</Window>

<ItemSontrol>
<Usercontrol>
<Grid>
<Grid>
<Image/>
</Grid>
</Grid>
</Usercontrol>
</ItemSontrol>

编辑:下面没有修复尺寸。 可以使用任何其他布局面板替换图像周围的DockPanel / Grid。其他人无法改变。

img.Stretch = Stretch.None 

3 个答案:

答案 0 :(得分:1)

将图像嵌入ViewBox并确保其父级将其大小限制为相应的窗口(如Grid

答案 1 :(得分:0)

从xaml代码中的图像中删除width,height,VerticalAligment和Horizo​​ntalAlignment属性。

答案 2 :(得分:0)

ItemsControl的默认ItemsPanelStackPanel,它限制项目在“堆栈”方向上使用的空间(默认为垂直)。如果您将Stretch设置为Fill,您可能会看到它会拉伸以填充水平空间。解决方案是将面板模板更改为网格:

<ItemsControl>
    <ItemsControl.ItemsPanelTemplate>
        <ItemsPanelTemplate>
            <Grid />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanelTemplate>

    <UserControl>
        ...
    </UserControl>
</ItemsControl>

但是在这种情况下,使用ItemsControl是没有意义的,因为你用一个项目填充整个区域。 UserControl现在是items集合中的第一个项目,任何其他项目将堆叠在网格中(除非您将行/列定义添加到面板模板网格并定义Grid.Row和{关于项目的{1}}。您是否尝试为列表项创建背景或容器?在这种情况下,您可能应该定义Grid.Column的{​​{1}}代替。