WPF如何动态获取Panel的宽度

时间:2014-02-07 12:19:25

标签: c# wpf layout width

您好我有一个空面板,并希望在运行时添加项目。我还想确保面板的宽度不会扩展窗口的宽度,如果是这样,我想要在其他面板中添加项目。

在我的XAML中:

        <Border Grid.Row="1" Margin="5,0,5,0" Padding="2" Background="LightYellow" 
      BorderBrush="SteelBlue" BorderThickness="1" CornerRadius="3"  >
        <StackPanel Name="legendsPanel" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
            <DockPanel  Name="legendsPnl1">                    
            </DockPanel>
            <DockPanel  Name="legendsPnl2">
            </DockPanel>
        </StackPanel>
    </Border>

在代码背后:

        int legendSize = 30;    // W for 1 Legend

    private void AddLegend(string title, double value, Brush clr)
    {

        MessageBox.Show("SP - " + legendsPanel.ActualHeight.ToString() + " DP - " + legendsPnl1.ActualHeight.ToString());  // 0, 0

        Rectangle rect = new Rectangle();
        rect.Width = 10; rect.Height = 10; rect.Fill = clr;

        Label lbl = new Label();
        lbl.Content = title + value;

        /* 
         * Here, before adding to legendsPnl1 I want to make sure that it's W =  (W + legendSize) <= legendsPanelWidth
         * legendsPanel - > StackPanel i.e. Parent of legendsPnl1
         * Width of legendsPanel, Grid, Window all are in wither Stretch mode or free Width - Auto or *, 
         * so can't make out how to get the W of them. At runtime, their W, ActualWidth are shown either 0, NaN, null
         */
        legendsPnl1.Children.Add(rect);
        legendsPnl1.Children.Add(lbl);

    }

如何找到legendsPnl1面板hasenough空间来添加两个元素(大小为legendSize var),否则在legendsPnl1面板中添加元素????

由于

0 个答案:

没有答案