保持控件的纵横比

时间:2018-05-25 05:35:05

标签: wpf wpf-controls

我现在已经找了很长时间才能告诉WPF控件(或窗口)保持一定的宽高比。

  1. 对于Window我发现的this解决方案,效果非常好。但是因为它使用Win32 API和窗口句柄,所以它不适用于任何WPF Control(因为据我所知,在WPF中只有窗口本身有句柄)。
  2. 对于Control,通常会获得将Control放入ViewBox的建议,但我不想扩展我的控件,我希望它们调整大小(并保持任何边框宽度或字体大小)。
  3. Control的其他“解决方案”涉及WidthActualHeightHeightActualWidth的任何形式的约束,或使用SizeChanged事件,但这会导致重新调整时出现大量闪烁,并且不太可靠。 如果将Width绑定到ActualHeight,则无法仅调整Width(通过拖动右边框),因为ActualHeight不会更改。 如果事件在宽度和高度同时变化时变得棘手,那么你必须改变SizeChanged事件中的大小......我是否提到了闪烁?
  4. 经过大量的阅读和搜索后,我得出的结论是强制任何控件保持一定宽高比的最佳方法是在MeasureArrange函数中执行此操作。< / p>

    我找到了this解决方案,它使用重写的DecoratorMeasure函数创建了Measure控件,但这意味着要放置任何可以保持其宽高比的控件在它自己的Decorator里面。如果必须的话,我可以忍受,但我想知道是否有更好的方法。

    所以,这是我的问题。是否可以创建附加属性Ratio和附加属性KeepRatio,并以某种方式覆盖Measure中相关控件的ArrangeOnKeepRatioChanged函数和所附属性的RatioChanged回调?

1 个答案:

答案 0 :(得分:0)

如果要覆盖排列/测量方法,则无需附加属性。这个包装器应该没问题:

SELECT FORMAT(GetDate(), 'yyyy-MM-dd')