2

オブジェクトの ItemDataTemplate を選択するクラスがあります。しかし、XAML コードで参照できません。(Page.Resources)。

XAML の [項目] ページです。クラスは commons フォルダーにあり、ここで commons フォルダーを参照しました。

xmlns:common="using:Sample_App.Common"

そして、それを XAML に追加したくない場合:

<common:MyDataTemplateSelector x:Key="Selector" AdTemplate="{StaticResource Ad}" NormalTemplate="{StaticResource Normal}"></common:MyDataTemplateSelector>

次のエラーが表示されます。

「MyDataTemplateSelector」という名前は名前空間「using:MyDataSelector」に存在しません

MyDataSelector クラスは次のとおりです。

namespace MyDataSelector
{
    private class MyDataTemplateSelector : DataTemplateSelector
    {
        public DataTemplate NormalTemplate { get; set; }

        public DataTemplate AdTemplate{ get; set; }

        protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
        {
            if (item is TestApp.Mainpage.NormalData)
                return NormalTemplate
            if (item is TestApp.Mainpage.AdData)
                return AdTemplate;

            return SelectTemplateCore(item, container);
        }
    }
}
4

1 に答える 1

3

コードにいくつかの問題があります。まず第一に、クラスが「コモンズフォルダー」にあると述べていますが、これはまったく関係ありません。通常、コード ファイルの場所はコンパイラにとって重要ではありませんが、クラスを宣言する名前空間は重要です。

namespace MyDataSelector // <- This is where your class can be found
{
    private class MyDataTemplateSelector : DataTemplateSelector
    {

したがって、クラスは名前空間MyDataSelectorにあるため、xaml ファイルの参照は次のようになります。

<Page x:Class="WpfApplication1.Page1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:myDataSelector="using:MyDataSelector">

そして、次のようにクラスを参照します。

<myDataSelector:MyDataTemplateSelector />

別の問題は、クラスがプライベートとして宣言されていることです。それは意味がなく、おそらくコンパイルされません。削除privateしてクラスを内部にするか、に変更しpublicます。

于 2012-12-23T05:49:12.670 に答える