Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 切换到不同显示器屏幕尺寸时WPF中的对象失真_C#_Wpf_Screen_Distortion - Fatal编程技术网

C# 切换到不同显示器屏幕尺寸时WPF中的对象失真

C# 切换到不同显示器屏幕尺寸时WPF中的对象失真,c#,wpf,screen,distortion,C#,Wpf,Screen,Distortion,我是WPF的新手,我的问题是: 我有一个应用程序,其中有一个圆形对象,它携带一些信息,我想拖放它。 我的问题是,当我在我的电脑上运行它时,它工作正常,但当我改变屏幕大小时,圆形物体的形状会变形并变成椭圆 我使用的网格有5行,列的比例相等(*) 当屏幕尺寸改变其英寸(物理尺寸)长度时,这是什么问题吗!=宽度 请给出你的专家建议 (Edit1:在画布中尝试过,画布中的圆圈看起来像圆圈,与任何屏幕无关,但不知道这是如何在网格中实现的!) ` ` 我知道我做错了,因为当分辨率改变时,不同的屏幕会有不

我是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"  />