我正在制作一个用于查看图像的程序,我遇到了一个问题,即宽幅图片超出了窗口。
我将属性“stretch”设置为“uniform”,但它不适用于宽幅图片。我该怎么办?
这是图像的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>
答案 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值对我来说似乎不对,除非你有一个真正令人羡慕的显示器设置。我给你的东西会使图像区域的宽度是左侧边栏的四倍,这是对你想要寻找的东西的粗略猜测。我喜欢那些比例。