如何制作加权面板

时间:2013-08-22 14:49:22

标签: c# wpf dependency-properties

虽然我不是要求这个代码我想要做的是创建一个Panel,允许我将一个名为Weight的属性设置为属性的子元素。完整的想法是我想要一个水平对齐的StackPanel,每个子元素都有一个权重。我想抓住我所需的面板宽度(屏幕宽度),然后给每个孩子他们需要的宽度。所以例如

我说这个WeightPanel里面有14个按钮。我的屏幕宽度是480。 按钮1的重量为2 按钮2的重量为1 ... 按钮13的重量为1 按钮14的重量为1.5

如果每个按钮的重量为1,则宽度为34.2。但在这种情况下,我有一个重量为2的按钮,另一个重量为1.5的按钮。因此,按钮1现在的宽度为68.4,按钮14的宽度为51.4。所以我重新计算1应该是480-(68.4 + 51.4)= 360.2 / 12 = 30.

因此按钮2到13的宽度为30,另外2个按钮的宽度为宽。我有创建自定义面板的基础知识。我需要的唯一代码就是这样我可以这样做

    <k:WeightedPanel>
        <Button k:WeightedPanel.Weight="2" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1" Content="A" />
        <Button k:WeightedPanel.Weight="1.5" Content="A" />
    </k:WeightedPanel>

我将处理的所有数学和布局内容。我在CodePlex上找到了一个例子,一个人能够创建依赖属性,但我不知道如何访问它。像这样

        List<double> weights = new List<double>();
        foreach (UIElement child in this.Children)
        {
            weights.Add(child.Weight);
        }

有人可以引导我朝正确的方向前进吗?

1 个答案:

答案 0 :(得分:1)

没有child.Weight,因为那是Attached Property

语法应为:

var weight = WeightedPanel.GetWeight(child);

尽管如此,这对我来说听起来真的像Grid

您可以使用简单的香草Grid

来实现您的要求
<Grid>
   <Grid.ColumnDefinitions>
      <ColumnDefinition Width="1.5*"/>
      <ColumnDefinition Width="2*"/>
      <ColumnDefinition Width="1*"/>
      <ColumnDefinition Width="1*"/>
      <ColumnDefinition Width="1*"/>
      <ColumnDefinition Width="1*"/>
  </Grid.ColumnDefinitions>
</Grid>