1

我有一个 C# XAML Windows 8 项目。

HubPage.xaml 包含一个GridView名为HubGridViewHubGridView使用一个ItemTemplateSelector名为HubItemTemplateSelector的自定义。HubItemTemplateSelector选择在名为HubResourceDictionary.xaml的文件定义的命名AdDataTemplateAdDataTemplate包含一个名为HubAdControl的元素。DataTemplateResourceDictionaryAdControl

我需要能够将HubAdControlsErrorOccurred事件处理程序设置为在某处的代码隐藏中定义的方法。我该如何做到这一点?

HubPage.xaml:

<GridView x:Name="HubGridView" ItemTemplateSelector="{StaticResource HubItemTemplateSelector}" />

HubResourceDictionary.xaml:

<DataTemplate x:Key="AdDataTemplate">
    <Grid>
        <UI:AdControl x:Name="HubAdControl" />
    </Grid>
</DataTemplate>
4

2 回答 2

0

您现在可能已经弄清楚了,但是我遇到了同样的问题。

我不确定我是否 100% 理解杰瑞的回答。我尝试将 AdControl 放在这样的资源文件中:

模板.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 :)

于 2014-05-03T14:41:55.720 回答
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 或其他任何事件。它在资源中并不重要。绑定到中继器的结果并不重要。

说得通?

于 2012-10-05T22:45:53.923 回答