纠正我,如果有这样做的更好的办法:)访问产生的UI元素代码
我要补充UIElement
(在我的情况StackPanel
)动态我的XAML。
我的代码:
foreach (Dienstleistung dienstleistung in dienstleistungenList)
{
var xaml = System.Windows.Markup.XamlWriter.Save(StackPanelTemplate);
var deepCopy = System.Windows.Markup.XamlReader.Parse(xaml) as StackPanel;
foreach (UIElement child in deepCopy.Children)
{
if (child is TextBlock)
{
var y = child as TextBlock;
switch (y.Text)
{
case "Titel":
y.Text = dienstleistung.Title;
break;
case "Beschreibung":
y.Text = dienstleistung.Summary;
break;
}
}
}
MainContainer.Children.Add(deepCopy);
}
的XAML:
<WrapPanel Name="MainContainer" HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel Name="StackPanelTemplate" Margin="5px" Width="200px" MouseLeftButtonUp="StackPanelOnClick">
<StackPanel.Style>
<Style>
<Setter Property="Border.Background" Value="LightCyan"/>
<Style.Triggers>
<Trigger Property="Border.IsMouseOver" Value="True">
<Setter Property="Border.Background" Value="LightGreen" />
</Trigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<Image Margin="5px" Width="190px" Height="190px"></Image>
<TextBlock TextAlignment="Center" TextWrapping="WrapWithOverflow" Margin="5px" FontSize="16">Titel</TextBlock>
<TextBlock TextAlignment="Center" TextWrapping="WrapWithOverflow" Margin="5px">Beschreibung</TextBlock>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBox x:Name="txtNum" x:FieldModifier="private" Margin="5,5,0,5" Width="50" Text="0" TextChanged="txtNum_TextChanged" />
<Button x:Name="cmdUp" x:FieldModifier="private" Margin="5,5,0,5" Content="˄" Width="20" Click="cmdUp_Click" />
<Button x:Name="cmdDown" x:FieldModifier="private" Margin="0,5,0,5" Content="˅" Width="20" Click="cmdDown_Click" />
</StackPanel>
</StackPanel>
</WrapPanel>
总之,我有一个模板,我复制它。
现在我有一个TextBox
在我的模板中,我有一个TextChanged
事件。现在我的问题是,为什么这个事件不会触发?有没有办法访问这些生成的元素?
丢弃所有代码并仔细阅读MSDN上的[数据模板概述](https://msdn.microsoft.com/en-us/library/ms742521.aspx)文章。然后使用ObservableCollection的Dienstleistung项目创建一个视图模型,并将ListBox的ItemsSource属性绑定到该集合。在ListBox的ItemTemplate中,声明TextBoxes并将其Text属性绑定到相应的Dienstleistung属性。 – Clemens