2

チュートリアルに従って、カスタムコントロールを作成しました。私が基本的に行ったことは、新しいプロジェクトを作成し、ファイルと、ファイルで呼び出されるディレクトリを追加することでした(CategoryBar.csコンパイルタイプを「リソース」に設定)。それから私はクラスを書き、ResourceDictionaryで埋めました。このプロジェクトを「UILib」と呼びましょう。ThemesThemes\generic.xamlCategoryBar.csgeneric.xaml

<?xml version="1.0" encoding="utf-8" ?> 
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
                xmlns:local="clr-namespace:ErnestUILib">
    <Style TargetType="local:CategoryBar">
        <Setter Property="Background" Value="Black" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:CategoryBar">
                        <Grid x:Name="GridView" Background="{TemplateBinding Background}" Margin="0,0,0,8">
                            <!-- The grid rowdefs, coldefs and whatever makes up the grid -->
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

そして、このライブラリへの参照を追加するプロジェクトでは、すべて正常に実行されます。に属性を追加しましたが、xmlns:EULib="clr-namespace:UILib;assembly=UILib"正常<phone:PhoneApplicationPage .. />に機能しています。ここで、別のコントロールを実装したいと思いました(カスタムUIコントロール用に1つの個別のライブラリと正確に1つのライブラリが必要なため)。これで、generic.xamlは次のようになります。

<?xml version="1.0" encoding="utf-8" ?> 
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
                xmlns:local="clr-namespace:ErnestUILib">
    <!-- THE NEW CUSTOM CONTROL -->
    <Style TargetType="local:PaginationBar">
        <Setter Property="Background" Value="Black" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:PaginationBar">
                        <Grid x:Name="GridView" Background="{TemplateBinding Background}" Margin="0,0,0,8">
                            <!-- The grid rowdefs, coldefs and whatever makes up the grid -->
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


    <!-- THE PREVIOUS CUSTOM CONTROL -->
    <Style TargetType="local:CategoryBar">
        <Setter Property="Background" Value="Black" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:CategoryBar">
                        <Grid x:Name="GridView" Background="{TemplateBinding Background}" Margin="0,0,0,8">
                            <!-- The grid rowdefs, coldefs and whatever makes up the grid -->
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

ここでは、でクラスを作成し、PaginationBarすべてPaginationBar.csセットアップしましたが、アプリケーションのxamlファイルで使用しようとすると、デザイナービューに白い塗りつぶされた長方形が表示され、左上隅に十字が表示されます。例外が発生しました'Control_TargetTypeMismatch'。私のいくつかのトリックの後、まだ何も機能しませんでしたが、Designerは使用時にロードされず<UILib:PaginationBar .. />、代わりにエラーが発生しますSystem.Reflection.TargetInvocationException(呼び出しのターゲットによって例外がスローされました)。プロジェクトを実行すると、XamlParseExceptionエラーが発生します。これは私がいくつかの詳細を引き出すことができる唯一の例外であり、それらのどれもリモートでさえ有用ではないと思います。とにかく、これは私がXamlParseExceptionで得るものです:XamlParseExceptionDetails

どうすればいいのかわからない。どんな助けでも大歓迎です。期待してくれてありがとう:)

4

1 に答える 1

1

PaginationBarが同じ名前空間"clr-namespace:ErnestUILib"で定義されていることを確認します。また、コントロールのコンストラクターで正しいDefaultStyleKeyが設定されていることを確認してください。

 public PaginationBar ()
    {
        DefaultStyleKey = typeof(PaginationBar );
    }
于 2011-06-04T07:00:21.260 に答える