按列表C#WPF中的项目设置矩形宽度

按列表C#WPF中的项目设置矩形宽度,c#,wpf,list,user-controls,C#,Wpf,List,User Controls,如何通过C#中的用户控件划分列表中的项的数量来设置矩形的宽度,使用WPF必须在代码隐藏中,而不是使用Xaml: public partial class UserControl1 : UserControl { private List<Color> colours; private int Highest; private int Lowest; private int Median; public int Width {get; set;

如何通过C#中的用户控件划分列表中的
项的数量来设置矩形的宽度,使用WPF必须在代码隐藏中,而不是使用Xaml:

public partial class UserControl1 : UserControl
{
    private List<Color> colours;

    private int Highest;
    private int Lowest;
    private int Median;
    public int Width {get; set;}
    private Data mydata;

    public Data data 
    { 
        get
        {
            return mydata;
        }
        set
        {
            mydata = value;
            BindData();
        }
    }


    public UserControl1()
    {
        colours = new List<Color>() { Colors.Red, Colors.White, Colors.Blue};

        InitializeComponent();

        if (Width == 0)
        {
            Width = 300;
        }
    }

    private void BindData()
    {
        //work out rectangle width
        Highest = Convert.ToInt32(mydata.Values.Max());
        Lowest = Convert.ToInt32(mydata.Values.Min());
        Median = Convert.ToInt32(mydata.Values.Average());

        foreach (double item in mydata.Values)
        {
            //create rectangle of width specified

            SetWidth();
        }
    }

    private void SetWidth()
    {
        //divide number of items in list by total to define Width
    }

    private Color GetColourFromValue(int totalNumber)
    {
        var numOfColours = colours.Count;

        if (totalNumber >= numOfColours)
        {
            return colours[totalNumber % numOfColours];
        }

        return colours[totalNumber]; 
    }

    private Color GetGradeColour(byte itemNumber, byte totalNumberItems, Color ItemColour)
    {
        byte multipler = (byte)(200 / totalNumberItems);

        byte a = (byte)((itemNumber + 1) * multipler);

        return Color.FromArgb(a, ItemColour.R, ItemColour.G, ItemColour.B);
    }

    private Rectangle CreateRectangle(double Value, int Width, Color ItemColor)//double value, width)
    {
        //create rectangle
        var rectangle = new Rectangle()
        {
            //Fill = new SolidColorBrush(ItemColor)
        };
        //give rectangle width
        return rectangle;
    }
}
公共部分类UserControl1:UserControl
{
私人名单颜色;
私人int最高;
私人机构最低;
私人中位数;
公共整数宽度{get;set;}
私人数据;
公共数据
{ 
得到
{
返回mydata;
}
设置
{
mydata=值;
BindData();
}
}
公共用户控制1()
{
Colors=newlist(){Colors.Red,Colors.White,Colors.Blue};
初始化组件();
如果(宽度==0)
{
宽度=300;
}
}
私有void BindData()
{
//计算矩形宽度
最高=Convert.ToInt32(mydata.Values.Max());
Lowest=Convert.ToInt32(mydata.Values.Min());
中位数=Convert.ToInt32(mydata.Values.Average());
foreach(mydata.Values中的双项)
{
//创建指定宽度的矩形
SetWidth();
}
}
私有void SetWidth()
{
//将列表中的项目数除以总数以定义宽度
}
专用颜色GetColourFromValue(整数totalNumber)
{
var numofcolors=colors.Count;
如果(totalNumber>=NumofColor)
{
返回颜色[totalNumber%NumofColor];
}
返回颜色[总数];
}
专用颜色GetGradeColor(字节itemNumber、字节totalNumberItems、颜色ItemColor)
{
字节乘法器=(字节)(200/totalNumberItems);
字节a=(字节)((itemNumber+1)*乘法器);
从argb返回颜色(a,ItemColour.R,ItemColour.G,ItemColour.B);
}
私有矩形CreateRectangle(双值,整型宽度,颜色项颜色)//双值,宽度)
{
//创建矩形
var rectangle=新矩形()
{
//填充=新的SolidColorBrush(ItemColor)
};
//给出矩形宽度
返回矩形;
}
}

如果希望一组控件自动共享父级
UserControl
的水平空间,请使用带列的
Grid
控件。这比尝试手动计算宽度容易得多

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Rectangle Grid.Column="0"/>
    <Rectangle Grid.Column="1"/>
    <Rectangle Grid.Column="2"/>
    <Rectangle Grid.Column="3"/>
</Grid>

你需要的是一个网格。给它你想要的列数。将每个矩形放置在不同的列中,它们将填充用户控件的空间。您不需要手动计算宽度。我正在尝试用c#而不是xaml来计算宽度。我已经设置好了栏目,只是尝试用一个矩形和一种颜色来填充这些栏目。谢谢你,这帮了大忙
var grid = new Grid
{
    ColumnDefinitions =
        {
            new ColumnDefinition(),
            new ColumnDefinition(),
            new ColumnDefinition(),
            new ColumnDefinition()
        }
};
var rectangle1 = new Rectangle { Fill = Brushes.Blue };
rectangle1.SetValue(Grid.ColumnProperty, 0);
grid.Children.Add(rectangle1);
var rectangle2 = new Rectangle { Fill = Brushes.Red };
rectangle2.SetValue(Grid.ColumnProperty, 1);
grid.Children.Add(rectangle2);
var rectangle3 = new Rectangle { Fill = Brushes.Green };
rectangle3.SetValue(Grid.ColumnProperty, 2);
grid.Children.Add(rectangle3);
var rectangle4 = new Rectangle { Fill = Brushes.Yellow };
rectangle4.SetValue(Grid.ColumnProperty, 3);
grid.Children.Add(rectangle4);