有没有人知道如何保持UserControl的高度/宽度比1:1?
E.g。如果高度>宽度,宽度和宽度高度将具有相同的大小,反之亦然。
答案 0 :(得分:7)
我不确定这会有效,但是如果您为SizeChanged
事件注册了一个处理程序,并且在那里放入代码,请保持宽高比为1:1。
SizeChangedEventArgs
参数具有旧大小和新大小,因此您可以检查哪些已更改并相应地更新另一个。
您可能需要引入一个保护变量,以便在更新SizeChanged
或Height
时不会发生级联的Width
事件。
答案 1 :(得分:5)
另一种选择:
<local:MyControl Width="{Binding ActualHeight, RelativeSource={RelativeSource Self}}"/>
答案 2 :(得分:4)
尝试使用ViewBox并将其Stretch属性设置为Uniform
答案 3 :(得分:0)
我使用此代码来保持宽高比
在usercontrol中全局定义org_width,org_height,org_ratio:
private static double org_width = 77.6;//desired width
private static double org_height = 81.4;//desired height
private static double org_ratio = org_width / org_height;
在SizeChanged事件中的usercontrol中使用此代码:
FrameworkElement UCborder = this;
UCborder.Width = UCborder.Height*org_ratio;
最后你的用户控制代码应如下所示:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace yournamespace
{
public partial class YourUserControl : UserControl
{
private static double org_width = 77.6;//desired width
private static double org_height = 81.4;//desired height
private static double org_ratio = org_width / org_height; // width/height
public YourUserControl()
{
InitializeComponent();
}
private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e)
{
FrameworkElement UCborder = this;
UCborder.Width = UCborder.Height*org_ratio;
}
}
}
祝你好运
答案 4 :(得分:-2)
private bool isSizeChangeDefered;
private void uiElement_SizeChanged(object sender, SizeChangedEventArgs e)
{
//Keep Acpect Ratio
const double factor = 1.8;
if(isSizeChangeDefered)
return;
isSizeChangeDefered = true;
try
{
if (e.WidthChanged)
{
driverPan.Height = e.NewSize.Width * factor;
}
if (e.HeightChanged)
{
driverPan.Height = e.NewSize.Width / factor;
}
}
finally
{
// e.Handled = true;
isSizeChangeDefered = false;
}
}
也许这有助于...干杯