0

尽管我没有要求在此代码上提供代码,但我想做的是制作一个面板,该面板允许我将名为 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);
        }

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

4

1 回答 1

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>
于 2013-08-22T14:55:53.520 回答