回答
我不確定這會起作用,但是如果您註冊SizeChanged
事件的處理程序,並且在那裏放入代碼,請保持寬高比爲1:1。
SizeChangedEventArgs
參數具有舊的大小和新的大小,因此您可以檢查哪些已更改並相應地更新其他大小。
您可能需要引入一個保護變量,以便在更新Height
或Width
時不會得到級聯的SizeChanged
事件。
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;
}
}
也許這可以幫助...乾杯
這個答案基本上是18個月前ChrisF提供的答案的一個例子。它也似乎不完整(什麼是driverPan變量?),我相信它有一個邏輯問題,如果在同一事件中改變高度/寬度(調整對角線大小) – 2011-05-05 22:51:01
嘗試使用視框和Stretch屬性設置爲統一
另一種選擇:
<local:MyControl Width="{Binding ActualHeight, RelativeSource={RelativeSource Self}}"/>
這對我來說完美,似乎是最簡單的答案(雖然我真的不明白它在做什麼)。 – brianberns 2016-03-30 04:45:48
@brianberns它將'Width'屬性綁定到'ActualHeight'屬性。但是「實際高度」是什麼?一個RelativeSource!和_什麼相對來源? (本身!也就是說,我在說「我希望我自己的寬度是任何ActualHeight佈局系統爲我計算的」。 – heltonbiker 2016-03-30 15:57:00
謝謝,這是有道理的。順便說一句,我發現這個解決方案的一個問題:如果只有主窗口的寬度發生變化(例如通過拖入或拖出右邊框),控件不知道調整大小,因爲它的高度沒有改變。 – brianberns 2016-03-31 14:45:37
我用這個代碼保持方面比率
在usercontrol全局定義org_width,org_height,org_rat IO:
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事件:
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;
}
}
}
好運
- 1. 如何以橫向適應縱向圖像在縱橫比保持縱橫比
- 2. 保持縱橫比在OpenGL
- 3. 柔性的VideoDisplay不保持縱橫比
- 4. CSS - 保持圖像縱橫比flexbox
- 5. 調整圖像保持縱橫比
- 6. 縮放位圖並保持縱橫比
- 7. 根據身高保持縱橫比
- 8. 使用LinearLayout.setBackgroundResource()保持縱橫比()
- 9. 彈力SVG保持縱橫比
- 10. 我如何保持調整大小窗口的縱橫比?
- 11. 如何在畫布對象內保持圖像的縱橫比
- 12. SVG剪裁的背景縮放 - 如何保持縱橫比?
- 13. 如何僅使用CSS保持html容器的縱橫比
- 14. 如何保持圖像縮略圖的縱橫比
- 15. 如何保持柔性箱內圖像的縱橫比:1
- 16. 如何在保持縱橫比的同時縮放SVG矩形?
- 17. 如何在使用GPUImage時保持縱橫比?
- 18. CSS如何拉伸以適應和保持縱橫比?
- 19. 如何調整在d3.js圖像時不保持縱橫比
- 20. Android:如何在動畫中保持縱橫比
- 21. 如何使渲染過濾器不保持縱橫比?
- 22. 如何使javafx.scene.Scene調整大小,同時保持縱橫比?
- 23. 如何保持包含在視口內一個div同時保持縱橫比
- 24. 保持NSWindow視圖的高寬比,而不是縱橫比。
- 25. 靈活的標題,保持標誌圖像的縱橫比
- 26. JWPlayer縱橫比爲我的16:9視頻保持4:3
- 27. 對象的配合:含有同時保持縱橫比
- 28. 使用PHP和保持縱橫比的縮放圖像
- 29. ggplot2:翻轉軸並保持數據的縱橫比
- 30. 填充ImageView的篩選,同時保持縱橫比
我想調整大小時,控件將閃爍。 – 2009-11-18 12:35:31
它不會閃爍,因爲WPF使用保留模式並以較低優先級完成渲染,所以渲染將看到所有「SizeChanged」事件的最終結果。例外:如果你的Window是'SizeToContent'並且它的大小受到影響,'SetWindowPos()'在計算過程中被立即調用,所以你可能會看到一些東西。 – 2009-11-19 09:22:32