簡體   English   中英

在Stackpanel中排列子元素

[英]Arranging Child elements in stackpanel

我使用單獨的類創建了一個Inkcanvas控件。我以以下方式創建了stackpanel。我正嘗試通過以下方式將inkcanvas插入stackpanel。但是該inkcanvas被添加到了窗口之外。請找到我的錯誤。

XAML代碼為

<StackPanel  Name="stkm" Background="CadetBlue" HorizontalAlignment="Right" Orientation="Horizontal" Width="1140" Margin="0,107,-1,94" Grid.Column="1">
    <Grid Height="459" Name="grid2" Width="1130">

    </Grid>
</StackPanel>

我的inkcanvas類代碼是

class mycan : InkCanvas
{
    string name;
    public mycan(string n)
    {
        name = n;
        this.Width =  250;
        this.Height = 200;
        // MouseDown += class1_MouseDown;
        Margin = new Thickness(5, 2, 5, 2);           

        // MouseRightButtonDown += class1_MouseRightButtonDown;     
    }
}

IAM通過以下方式添加stackpanel子級

public MainWindow()
{
    InitializeComponent();
    mycan mycanvas1 = new mycan("PA");
    mycan mycanvas2 = new mycan("RA");
    mycan mycanvas3 = new mycan("JA");           
    stkm.Children.Add(mycanvas1);
    stkm.Children.Add(mycanvas2);
    stkm.Children.Add(mycanvas3);
}

有什么特殊的原因需要將InkCanvas動態添加到StackPanel中?

一種簡單得多的方法是使用以下方法:

<StackPanel  Name="stkm" Background="CadetBlue" HorizontalAlignment="Right" Orientation="Horizontal" Width="1140" Margin="0,107,-1,94" Grid.Column="1">
   <Grid Height="459" Name="grid2" Width="1130">
      <InkCanvas Name="PA" Width="250" Height="200" Margin="5,2"/>
      <InkCanvas Name="RA" Width="250" Height="200" Margin="5,2"/>
      <InkCanvas Name="JA" Width="250" Height="200" Margin="5,2"/>
   </Grid>
</StackPanel>

另外,如果您確實需要動態生成InkCanvas,則實際上不需要在新類中從InkCanvas繼承。

InkCanvas mycanvas1 = new InkCanvas()
{
   Name = "PA",
   Width = 250,
   Height = 200,
   Margin = new Thickness(5, 2, 5, 2)
};

主要問題是您在XAML文件中添加到StackPanel的Grid幾乎完全填滿了StackPanel-StackPanel的寬度為1140px,而Grid的寬度為1130px。

請記住,StackPanels使用相對布局工作,這意味着一個元素的位置取決於上一個元素的大小和位置。 這意味着,在網格之后,僅剩下10px的StackPanel用於InkCanvas。 如果您打算使用絕對布局,請改為將畫布添加到Grid控件中。

不過,我也同意Mike Eason的觀點。 通常,最佳做法是在XAML中保留盡可能多的UI代碼。 您可以使用Visibility屬性在運行時顯示/隱藏畫布。 可以通過代碼隱藏,甚至更好地使用數據綁定來更改此屬性。

<StackPanel  Name="stkm" Background="CadetBlue" HorizontalAlignment="Right" Orientation="Horizontal" Width="1140" Margin="0,107,-1,94" Grid.Column="1">
    <InkCanvas Name="PA" Width="250" Height="250" Margin="5, 2, 5, 2" Visibility="Visible" />
    <InkCanvas Name="RA" Width="250" Height="250" Margin="5, 2, 5, 2" Visibility="Visible" />
    <InkCanvas Name="JA" Width="250" Height="250" Margin="5, 2, 5, 2" Visibility="Collapsed" />
</StackPanel>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM