如何从C#代码设置XAML元素?

时间:2011-09-29 20:08:11

标签: c# wpf xaml

所以我有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 />

2 个答案:

答案 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();
    }