Как сохранить соотношение сторон UserControl? - PullRequest
2 голосов
/ 18 ноября 2009

Кто-нибудь знает, как сохранить соотношение высоты и ширины 1: 1 пользовательского элемента управления?

например. если высота> ширина, ширина и высота будут одинакового размера и наоборот.

Ответы [ 5 ]

7 голосов
/ 18 ноября 2009

Я не уверен, что это сработает, но если вы зарегистрируете обработчик для события SizeChanged и вставите туда свой код, сохраняйте соотношение сторон 1: 1.

Аргумент SizeChangedEventArgs имеет старый размер и новый размер, поэтому вы можете проверить, какой из них изменился, и соответствующим образом обновить другой.

Может потребоваться ввести переменную защиты, чтобы вы не получили каскад событий SizeChanged в результате обновления Height или Width.

5 голосов
/ 29 января 2015

Другая альтернатива:

<local:MyControl Width="{Binding ActualHeight, RelativeSource={RelativeSource Self}}"/>
4 голосов
/ 08 мая 2011

Попробуйте использовать ViewBox и установите для его свойства Stretch значение Uniform

0 голосов
/ 11 марта 2015

я использовал этот код для сохранения соотношения сторон

внутри 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;

используйте этот код внутри usercontrol в событии 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;
     }
  }
}

удачи

0 голосов
/ 05 мая 2011
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;
        }
    }

может быть, это помогает ... ура

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...