WrapPanel 中的 C# WPF 控件

C# WPF Controls in WrapPanel

大家好, 我正在尝试通过代码添加一些控件,但我遇到了一个小问题。 我在 WrapPanel 中有复选框。复选框变大 1.5 倍。当我改变 window 的大小时,它们相互碰撞。 不改造一切正常。如何解决?

        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]);             
        }
    }

RenderTransform 属性 用于get/set 仅影响控件外观而不影响其布局逻辑的变换。你想要的是在逻辑上和视觉上转换你的控件,并实现你应该使用 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);
}