我使用单独的类创建了一个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;
}
}
我以下列方式添加了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);
}
答案 0 :(得分:0)
为什么需要动态地将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)
};
答案 1 :(得分:0)
主要问题是你添加到XAML文件中的StackPanel的网格几乎完全填满StackPanel - StackPanel宽1140px,而Grid的宽度是1130px。
请记住,StackPanels使用相对布局,这意味着一个元素的位置取决于前一个元素的大小和位置。这意味着,在Grid之后,InkCanvas只剩下10px的StackPanel。如果您的目的是使用绝对布局,请将画布添加到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>