我一直试图为问卷调查应用程序设置用户控件,在某些情况下,我有一些问题需要后续问题。一个简单的场景可能是我们想要显示后续问题,如果我们得到一个"是"在某些问题上。
此时我已经按照Zenexer on a similar question中的示例进行了操作。我的想法是,我将我的用户控件的第一个孩子放在一个容器(StackPanel
或其他)和所有容器中
第二个StackPanel
中的后续元素。但是在aforementioned example中,所有子元素都被填充到用户控件中的一个元素中。据我所知,这是因为[ContentProperty(nameof(Children))]
设置为用户控件的所有内容。
我试图在Zenexer的例子中更改Children
的getter和setter,但无济于事。
问题: 有没有办法将我的用户控件的子项溢出到我的用户控件中的两个(或更多)元素,使用XAML,如下所示:
MainWindow.xaml
<SubQuestionBox>
<BinaryQuestion
QuestionNumber="4.1"
QuestionText="Parent question"/>
<TextQuestion
QuestionNumber="4.1.1"
QuestionText="Child question 1"/>
<TextQuestion
QuestionNumber="4.1.2"
QuestionText="Child question 2"/>
</SubQuestionBox>
SubQuestionBox.xaml
<UserControl x:Class="SubQuestionBox">
<!--StackPanel To contain the question controls-->
<StackPanel>
<StackPanel x:Name="ParentContainer" />
<StackPanel x:Name="SubQuestionsContainer" />
</StackPanel>
</UserControl>
答案 0 :(得分:0)
如果有人想知道我是怎么做的,那就是这样的。
SubQuestionBox.xaml 与原始问题类似
<强> SubQuestionBox.xaml.cs 强>
Children
属性为the example of @Zenexer
DependencyProperty
public SubQuestionBox()
{
InitializeComponent();
Children = SubQuestionsContainer.Children;
// add listener for Loaded event and call OnLoaded()
Loaded += OnLoaded;
if (ParentQuestion != null)
// The BinaryQuestion has a AnswerChanged event
ParentQuestion.AnswerChanged += ToggleCollapse;
}
public void DistributeQuestions()
{
// This method seems super hacky to me.
// I would have thought there is a more elegant way
UIElement parent = null;
if (Children != null)
{
parent = Children[0];
Children.RemoveAt(0);
}
if (ParentContainer != null && parent != null)
{
ParentContainer.Children.Add(parent);
}
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
DistributeQuestions();
}