为什么Image超越Grid?

时间:2017-12-05 13:22:21

标签: c# wpf

我正在制作一个用于查看图像的程序,我遇到了一个问题,即宽幅图片超出了窗口。

我将属性“stretch”设置为“uniform”,但它不适用于宽幅图片。我该怎么办?

此问题的一个示例: enter image description here

如果我展开窗口就会是这样 enter image description here

这是图像的XAML:

<Grid Grid.Row="1">
    <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="300" Width="0.1*"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition MinWidth="300" Width="*"/>
    </Grid.ColumnDefinitions>
    <TreeView Style="{StaticResource BorderStyle}" ScrollViewer.VerticalScrollBarVisibility="Auto" Name="folders" Grid.Row="0"  Grid.Column="0" TreeViewItem.Expanded="treeView_Expanded">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
                <StackPanel>
                    <Label HorizontalAlignment="Stretch" Cursor="Hand" Content="{Binding fileName}" Foreground="#FFF"/>
                </StackPanel>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
    <GridSplitter Margin="-5 5 -5 5" Cursor="SizeWE" Grid.Row="0" Grid.Column="1" VerticalAlignment="Stretch" ShowsPreview="False" Width="5" HorizontalAlignment="Center" Background="Transparent"/>
    <Border Style="{StaticResource BorderStyle}" Grid.Row="0" Grid.Column="2">
        <Image Name="ImageViewer"/>
    </Border>
  </Grid>

1 个答案:

答案 0 :(得分:2)

图像正在调整其父级,但第一和第三个网格列定义中的MinWidth="300"强制父级比窗口宽。如果两人不同意,MinWidth会覆盖Width

如果您更改为这些值,它将不再这样做,除非窗口太窄而无法使用:

    <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="30" Width="*"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition MinWidth="30" Width="4*"/>
    </Grid.ColumnDefinitions>

我不确定您使用的是什么:数字/ *宽度值(System.Windows.GridLength structure,其文档符合通常令人遗憾的WPF文档标准)不能立即使用明显的方式。以下创建三列。中间的大小适合其内容。第一个使用剩余空间的第十一个;最后一个使用剩下空间的十一十一。 &#34; *&#34;意味着&#34; 1*&#34;。我们添加所有数值并相应地对可用空间进行评级。

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="0.1*"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>

这完全等同于:

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="10*"/>
    </Grid.ColumnDefinitions>

它是成比例的。

所以你的MinWidth值对我来说似乎不对,除非你有一个真正令人羡慕的显示器设置。我给你的东西会使图像区域的宽度是左侧边栏的四倍,这是对你想要寻找的东西的粗略猜测。我喜欢那些比例。