我有一个C#XAML Windows 8项目。
HubPage.xaml包含名为 HubGridView 的GridView
。 HubGridView 使用名为 HubItemTemplateSelector 的自定义ItemTemplateSelector
。 HubItemTemplateSelector 选择名为 HubResourceDictionary.xaml 的DataTemplate
文件中定义的名为 AdDataTemplate 的ResourceDictionary
。 AdDataTemplate 包含名为 HubAdControl 的AdControl
元素。
我需要能够将HubAdControl
s ErrorOccurred
事件处理程序设置为某个地方代码隐藏中定义的方法。我该如何做到这一点?
HubPage.xaml:
<GridView x:Name="HubGridView" ItemTemplateSelector="{StaticResource HubItemTemplateSelector}" />
HubResourceDictionary.xaml:
<DataTemplate x:Key="AdDataTemplate">
<Grid>
<UI:AdControl x:Name="HubAdControl" />
</Grid>
</DataTemplate>
答案 0 :(得分:0)
它的工作方式就像您认为的那样:
<Grid.Resources>
<DataTemplate x:Key="MyTemplate">
<TextBlock Loaded="TextBlock_Loaded_1">Hello World</TextBlock>
</DataTemplate>
</Grid.Resources>
<GridView ItemTemplate="{StaticResource MyTemplate}" />
在我的示例中,每次渲染TextBox时都会引发Loaded - 这是绑定到GridView的ItemsSource的每个项目。您可以轻松使用OnError之类的其他事件。它与资源无关。它与绑定到转发器的结果并不重要。
有意义吗?
答案 1 :(得分:0)
你现在可能已经想到了这一点,但我遇到了同样的问题。
我不确定我是否理解杰里的回答是100%。我尝试将AdControl放在这样的资源文件中:
<强> Templates.xaml 强>
<DataTemplate x:Key="AdTemplate1">
<StackPanel Margin="70,40,70,140" HorizontalAlignment="Center" VerticalAlignment="Center">
<ui:AdControl
ApplicationId="d25517cb-12d4-4699-8bdc-52040c712cab"
AdUnitId="10043030" HorizontalAlignment="Center"
Height="600" Margin="0,0,0,0"
VerticalAlignment="Center" Width="300" ErrorOccurred="OnAdError" />
</StackPanel>
</DataTemplate>
然后在我的xaml中,我使用DataTemplateSelector引用了DataTemplate。我尝试在我使用DataTemplate的xaml代码中创建OnAdError事件处理程序。我遇到了运行时异常,资源模板需要OnAdError方法。
也许我错过了一些东西,我当然不是XAML和Windows 8(.1)应用程序的专家。但是,我最终做的是创建一个带有控件的UserContol以及后面代码中的OnAdError处理程序,并在资源文件中引用此UserControl。现在一切都按预期工作了,我得到了一个奖励,我可以收集这个用户控件中的所有广告逻辑。下一步是动态更改AdUnitId :)