所以我有wpf应用程序,我的xaml看起来像这样:
<Window x:Class="MyTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:MyTest.Layouts"
xmlns:pl="clr-namespace:Planerator"
Title="CardView" Topmost="False" AllowsTransparency="True" WindowStyle="None" WindowState="Maximized" ShowInTaskbar="False">
<Grid>
<pl:Planerator x:FieldModifier="public" x:Name="FrontProjection" Margin="240" >
<my:FrontLayout />
</pl:Planerator>
<pl:Planerator x:FieldModifier="public" x:Name="BackProjection" Margin="240" >
<my:BackLayout />
</pl:Planerator>
</Grid>
<Window.Background>
<SolidColorBrush />
</Window.Background>
</Window>
有没有办法在我的C#代码中为Planerators设置<my:FrontLayout />
和<my:FrontLayout />
?
编辑: Planerator:http://blogs.msdn.com/b/greg_schechter/archive/2007/10/26/enter-the-planerator-dead-simple-3d-in-wpf-with-a-stupid-name.aspx
FrontLayot和BackLayout -s只是简单的xaml布局。
EDIT2:我需要从代码中设置它们的原因是我想要使用条件compilasion。因为例如对于DEBUG,它应该是<my:DebugFrontLayer />
。
答案 0 :(得分:0)
给他们起名字,例如
<my:FrontLayout Name="FrontLayout1" />
然后可以从C#访问它们作为该名称的变量。
答案 1 :(得分:0)
查看Planerator类,您会看到它设置了ContentPropertyAttribute
:
[ContentProperty("Child")]
public class Planerator : FrameworkElement
{
}
这意味着
<pl:Planerator x:FieldModifier="public" x:Name="FrontProjection" Margin="240" >
<my:FrontLayout />
</pl:Planerator>
实际上这样做:
<pl:Planerator x:FieldModifier="public" x:Name="FrontProjection" Margin="240" >
<pl:Planerator.Child>
<my:FrontLayout />
</pl:Planerator.Child>
</pl:Planerator>
这也意味着从代码隐藏中,例如在MyTest的构造函数中,或者其他任何地方,您可以执行以下操作来实现相同的目标:
public MyTest()
{
InitializeComponent();
FrontProjection.Child = new FrontLayout();
}