C# 切换到不同显示器屏幕尺寸时WPF中的对象失真
我是WPF的新手,我的问题是: 我有一个应用程序,其中有一个圆形对象,它携带一些信息,我想拖放它。 我的问题是,当我在我的电脑上运行它时,它工作正常,但当我改变屏幕大小时,圆形物体的形状会变形并变成椭圆 我使用的网格有5行,列的比例相等(*) 当屏幕尺寸改变其英寸(物理尺寸)长度时,这是什么问题吗!=宽度 请给出你的专家建议 (Edit1:在画布中尝试过,画布中的圆圈看起来像圆圈,与任何屏幕无关,但不知道这是如何在网格中实现的!) `C# 切换到不同显示器屏幕尺寸时WPF中的对象失真,c#,wpf,screen,distortion,C#,Wpf,Screen,Distortion,我是WPF的新手,我的问题是: 我有一个应用程序,其中有一个圆形对象,它携带一些信息,我想拖放它。 我的问题是,当我在我的电脑上运行它时,它工作正常,但当我改变屏幕大小时,圆形物体的形状会变形并变成椭圆 我使用的网格有5行,列的比例相等(*) 当屏幕尺寸改变其英寸(物理尺寸)长度时,这是什么问题吗!=宽度 请给出你的专家建议 (Edit1:在画布中尝试过,画布中的圆圈看起来像圆圈,与任何屏幕无关,但不知道这是如何在网格中实现的!) ` ` 我知道我做错了,因为当分辨率改变时,不同的屏幕会有不
`
我知道我做错了,因为当分辨率改变时,不同的屏幕会有不同的物理单位。请建议使用网格的更好方法
(编辑2:根据ben的解决方案,下面是结果比较,在我的例子3中,我更喜欢,但无论如何都要注意中风!!)
嗯,我不太确定您想做什么,所以这里有几个解决方案。它们都使用
网格
,因为您特别要求它。然而,我不认为这真的合适
您的问题是椭圆
大小由网格
确定,并且没有强制高宽比的约束。因此,外观不仅在屏幕分辨率不同时发生变化,而且在调整窗口大小时也会发生变化
解决方案1:设置椭圆的宽度和高度
解决方案2:在网格中设置宽度和高度
解决方案3:使用视图框
解决方案4:将椭圆宽度和高度绑定在一起
分歧
解决方案1和2都为圆提供了一个恒定的大小,无论网格大小如何
解决方案3和4都根据网格大小调整圆的大小
解决方案3也会改变冲程的厚度,而解决方案4不会
编辑:修复了解决方案4嗯,我不太确定您想做什么,所以这里有几个解决方案。它们都使用
网格
,因为您特别要求它。然而,我不认为这真的合适
您的问题是椭圆
大小由网格
确定,并且没有强制高宽比的约束。因此,外观不仅在屏幕分辨率不同时发生变化,而且在调整窗口大小时也会发生变化
解决方案1:设置椭圆的宽度和高度
解决方案2:在网格中设置宽度和高度
解决方案3:使用视图框
解决方案4:将椭圆宽度和高度绑定在一起
分歧
解决方案1和2都为圆提供了一个恒定的大小,无论网格大小如何
解决方案3和4都根据网格大小调整圆的大小
解决方案3也会改变冲程的厚度,而解决方案4不会
编辑:固定解决方案4另一种放大圆而不失真的方法与viewbox不同: "
"
不像Viewbox那样,在网格的中间放置圆圈,这个拉伸=“均匀”拉伸圆并放置网格的左边。但所有屏幕的形状都保持不变。
这是最基本的,我不知道我怎么会忘记这一点。另一种放大圆而不失真的方法是使用viewbox: "
"
不像Viewbox那样,在网格的中间放置圆圈,这个拉伸=“均匀”拉伸圆并放置网格的左边。但所有屏幕的形状都保持不变。
这是基本的,我不知道我怎么会忘记这一点。有些关联:@Tico ty用于回复,但我的问题是我的屏幕工作正常,但当我改变屏幕时,列和行的比率会发生变化,这使我的圆看起来像椭圆(请注意,WPF是DPI感知的,如果您使用
*
设置网格定义,它将相应地扩展/减少!@Tico是的,我知道,所以我可以使一个圆看起来像圆……无论任何屏幕……是否在屏幕更改事件或其他事件中有动态变化比率……或者我必须离开网格并切换到canvas..请给出您的建议….有些相关:@Tico ty以供回复,但我的问题是我的屏幕工作正常,但当我改变屏幕时,列和行的比率会发生变化,这使我的圆看起来像椭圆..:(请注意,WPF是DPI感知的,如果您使用*
设置网格定义,它将相应地扩展/减少!@Tico是的,我知道,所以我可以使一个圆看起来像圆……无论任何屏幕……是否在屏幕更改事件或其他事件中有动态变化比率……或者我必须离开网格并切换到canvas..请给出您的提示…解决方案3..非常接近我想要的…实际上我想要的是宽度值应该根据屏幕大小动态变化…在这里
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="257*" />
<RowDefinition Height="121*" />
<RowDefinition Height="442*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="520*" />
<ColumnDefinition Width="121*" />
<ColumnDefinition Width="865*" />
</Grid.ColumnDefinitions>
<Ellipse Name="ellipse2" Stroke="Black" Grid.Row="1" Grid.Column="1" /> </Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="257*" />
<RowDefinition Height="121*" />
<RowDefinition Height="442*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="520*" />
<ColumnDefinition Width="121*" />
<ColumnDefinition Width="865*" />
</Grid.ColumnDefinitions>
<Ellipse Stroke="Black" Grid.Row="1" Grid.Column="1" Width="20" Height="20" />
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="257*" />
<RowDefinition Height="20" />
<RowDefinition Height="442*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="520*" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="865*" />
</Grid.ColumnDefinitions>
<Ellipse Stroke="Black" Grid.Row="1" Grid.Column="1" />
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="257*" />
<RowDefinition Height="121*" />
<RowDefinition Height="442*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="520*" />
<ColumnDefinition Width="121*" />
<ColumnDefinition Width="865*" />
</Grid.ColumnDefinitions>
<Viewbox Grid.Row="1" Grid.Column="1">
<Ellipse Stroke="Black" Width="20" Height="20" />
</Viewbox>
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="257*" />
<RowDefinition Height="121*" />
<RowDefinition Height="442*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="520*" />
<ColumnDefinition Width="121*" />
<ColumnDefinition Width="865*" />
</Grid.ColumnDefinitions>
<Ellipse x:Name="ellipse" Stroke="Black" Grid.Row="1" Grid.Column="1"
Height="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth}" />
</Grid>
<Grid.RowDefinitions>
<RowDefinition Height="257*" />
<RowDefinition Height="121*" />
<RowDefinition Height="442*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="520*" />
<ColumnDefinition Width="121*" />
<ColumnDefinition Width="865*" />
</Grid.ColumnDefinitions>
<Ellipse Stroke="Black" Grid.Row="1" Grid.Column="1" Stretch="Uniform" />