Элементы управления C# WPF в WrapPanel

введите описание изображения здесь Эй, ребята, я пытаюсь добавить некоторые элементы управления с помощью кода, но у меня есть одна маленькая проблема. У меня есть флажки внутри WrapPanel. Флажки трансформируются в 1,5 раза больше. Когда я меняю размер окна, они сталкиваются друг с другом. Без трансформации все нормально. Как это исправить?

        List<System.Windows.Controls.CheckBox> CheckboxList = new List<CheckBox>();

        public List<string> Users = new List<string> { "First Student", "Very First Student", "Second Student", "Student Student" };

        for (int i = 0; i < Users.Count; i++)
        {
            CheckboxList.Add(new System.Windows.Controls.CheckBox());
            heckboxList[i].RenderTransform = new ScaleTransform(1.5,1.5);

            CheckboxList[i].Content = Users[i];
            CheckboxList[i].Margin = new Thickness(5, 5, 5, 0);
            Panel.Children.Add(CheckboxList[i]);             
        }
    }

2 ответа

Решение

RenderTransform свойство используется для получения / установки преобразования, которое влияет только на внешний вид элемента управления и не влияет на его логику компоновки. Однако вы хотите преобразовать свои элементы управления как логически, так и визуально, и добиться того, чтобы вы использовали LayoutTransform собственность вместо

Это может быть не очень красиво, но вы можете применить RenderTransform к самой панели, дочерние элементы также преобразуются.

Причина, по которой она выглядит не очень красиво, заключается в том, что размер панели изменяется, поэтому вам придется применить новый размер на основе значений преобразования.

Можно использовать такой фрагмент кода:

double xScale = 1.5;
double yScale = 1.5;

Panel.RenderTransform = new ScaleTransform(xScale, yScale);
Panel.Width = Panel.Width / xScale;
Panel.Height = Panel.Height / yScale;

List<System.Windows.Controls.CheckBox> CheckboxList = new List<CheckBox>();

List<string> users = new List<string> { "First Student", "Very First Student", "Second Student", "Student Student" };

foreach (string user in users)
{
    CheckBox newItem = new CheckBox();
    newItem.Content = user;
    Panel.Children.Add(newItem);
}
Другие вопросы по тегам