问题  如何绑定窗口's size to an image's size?

玻璃杯

知名会员
已加入
2019年11月22日
留言内容
126
编程经验
Beginner
我有两个窗口,其中一个仅用于显示图像。在另一个窗口中确定图像。除了一件事情,我已经完成了所有功能,我不知道如何使窗口的大小始终与视图框中的图像匹配。
所讨论的窗口包含一个网格(一行一列)。在里面是视图框,然后在里面是图像。我正在尝试使用无边框的无样式窗口,因此您只看到图像而没有其他任何东西。

我真的以为我不需要帮助:/

谢谢
 

玻璃杯

知名会员
已加入
2019年11月22日
留言内容
126
编程经验
Beginner
我实际上在执行此操作时遇到了麻烦。是否需要一个视图框?甚至是网格?因为我不需要其他任何东西了,我应该只将图像放在窗口上吗?

编辑:没关系,解决了它。我做事笨拙,甚至不需要约束。
 
Last edited:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,979
地点
英国
编程经验
10+
您还应该知道,如果要在WPF中将控件的大小设置为其父控件的大小,则不应为该控件的高度或宽度指定大小。这样做可以将控件的大小调整为其父容器/控件的大小。再次与Winforms相反,而在Winforms中;您需要设置控件的默认高度或宽度,而只需设置锚属性即可,或者停靠控件。在Winforms中,也可以调用Autosize属性以将其自身调整为其内容的大小,在WPF中我们不使用任何此属性。

顺便提一句,您应该知道,如果不绑定某些内容,则可能做错了。 WPF在mvvm的基础上效果最好,并且该模型将包括严格的绑定,这正是WPF所设计的。遵循mvvm模式,可以确保数据流是恒定的,并在发生更改时始终更新。尝试养成绑定对象的习惯。尽管这是一篇老文章,但我确实觉得参考该主题的解释很有用: 模式-具有Model-View-ViewModel设计模式的WPF应用
 

玻璃杯

知名会员
已加入
2019年11月22日
留言内容
126
编程经验
Beginner
我最终要做的是这样设置:Window-> Grid -> Viewbox ->图像。我将窗口的宽度/高度设置为自动,将SizeToContent设置为WidthAndHeight,还将网格的一行和一列都设置为自动。这几乎完美地提供了我想要的效果,图像显示的分辨率似乎比100%大。

您说使用自动调整不是路要走,我希望没有它就可以做到这一点,但是我尝试了所有我能想到的并且无法获取图像/视图框来更新属性的方法,因此,窗口(这也是绑定到该属性),大小不变。那是一个完全的死胡同。然后,当我发现这样做的方法时,我认为这是正确的方法,因为它要简单得多。

我很好奇并准备纠正此问题。我的第一个问题是,如果要执行此操作,将使用什么控件。显然,如果没有图像控件,您将无法做到这一点,但是那会在一个单元格上吗?您会使用检视框吗?

我的第二个问题是,我将图像的源属性绑定到字符串属性(本质上是Uri),该属性在必要时会更改并指向其他图像。因为它没有直接绑定到BitmapImage对象,所以这可能就是为什么从未触发SourceUpdated事件(从未执行其中的测试代码)的原因。我遇到的问题是,当图像更改时,无法获得图像控件以其新大小来更新属性。看起来这很简单,没有比我完成的任何其他绑定更困难的事情了,但是对于我自己的一生,我无法弄清楚。我可能忽略了一些简单的基本内容。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,979
地点
英国
编程经验
10+
我将窗口的宽度/高度设置为自动
我不会将其设置为“自动”。我只是不会设定值。
SizeToContent设置为WidthAndHeight
正如我之前告诉您的那样,不设置控件的高度或宽度会将控件的大小调整为其父控件的最大大小,因此不需要这样做。
网格的一行和一列都设置为自动。
鉴于网格的功能有限,可以了。或者,您可以将其设置为auto,然后再设置列定义的宽度:
C#:
<Grid.ColumnDefinitions>
                <ColumnDefinition Width="
您说使用自动调整不是可行的方法,
再次看到第二个报价...
这可能就是为什么从未触发SourceUpdated事件的原因
我不知道。您不显示代码,所以我怎么可能建议?

您可以通过Goggle设置图像。有许多有关如何执行此操作的示例,包括MSDN Docs。
 
最佳 底部