#c# #wpf #xaml
#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>
Есть ли способ установить <my:FrontLayout />
и <my:FrontLayout />
для планировщиков внутри моего кода на C #?
РЕДАКТИРОВАТЬ: 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 -ы — это просто простые макеты xaml.
ПРАВКА2: причина, по которой мне нужно устанавливать их из кода, заключается в том, что я хочу использовать условную компиляцию. потому что, например, для ОТЛАДКИ это должно быть <my:DebugFrontLayer />
.
Комментарии:
1. Пожалуйста, измените свой заголовок на что-то более описательное по вопросу.
2. Можете ли вы опубликовать свои определения классов для pl: Planerator, my:FrontLayout и my:BackLayout?
Ответ №1:
Взглянув на класс 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();
}
Ответ №2:
Дайте им имена, например
<my:FrontLayout Name="FrontLayout1" />
и тогда они должны быть доступны из C # как переменные с таким именем.