8

Silverlight Toolkitコントロールを使用しているときに、ExpressionBlendでUserControlを開くときに奇妙な問題が発生します。私のUserControlは、ツールキットのListBoxDragDropTargetを次のように使用します。

<controlsToolkit:ListBoxDragDropTarget mswindows:DragDrop.AllowDrop="True" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
        <ListBox ItemsSource="{Binding MyItemControls}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <controlsToolkit:WrapPanel/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>
</controlsToolkit:ListBoxDragDropTarget>

Visual Studio 2008ではすべてが期待どおりに機能し、正常に表示されます。ただし、BlendでUserControlを開こうとすると、XamlParseException:[Line:0 Position:0]が表示され、デザインビューに何も表示されません。より具体的には、Blendは不平を言います:

System.Windows.Controls.ListBoxDragDropTarget:TargetTypeの不一致に問題があるため、要素「ListBoxDragDropTarget」を表示できませんでした。

私のSilverlightアプリケーションは、2009年11月のツールキットリリースのSystem.Windows.Controls.Toolkitを参照しており、ListBoxDragDropTargetに次の名前空間宣言を含めるようにしました。

xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"
xmlns:mswindows="clr-namespace:Microsoft.Windows;assembly=System.Windows.Controls.Toolkit"

ListBoxDragDropTargetコントロールラッパーをコメントアウトしてListBoxをそのままにしておくと、エラーなしでデザインビューにすべてが正常に表示されます。さらに、これはさまざまなSilverlight Toolkitコントロールで発生していることに気付きました。これは、ListBoxDragDropTargetをコメントアウトして、次のように置き換えるためです。

<controlsToolkit:BusyIndicator />

同じ正確なエラーがBlendでも発生します。さらに奇妙なことに、新しいSilverlightアプリケーションをブレンドで開始すると、これらのツールキット要素をエラーなしで追加できるため、ツールキットアセンブリへのプロジェクト参照で何か馬鹿げたことが起こっているように見えます。

エラーはTargetTypeに関係しており、Blendはおそらくデフォルトのスタイルをロードしようとしているため、これは、generic.xamlからツールキットコントロールのデフォルトのスタイルをロードすることと関係があると確信しています。

誰かが以前にこの問題に遭遇したことがありますか、または私の問題が何であるかについて何か考えがありますか?

4

4 に答える 4

11

こんにちは私たちはまったく同じ問題を抱えていました、私たちはこの問題を抱えていたプロジェクトの参照をチェックすることによってそれを解決しました。参照されるすべてのツールキットアセンブリは、ディスク上の同じディレクトリにある必要があります。

System.Windows.Controls.Toolkit.dllへのプロジェクト参照は、問題の原因となっている元のパスに常に「ジャンプ」して戻ります。notepad ++(またはお気に入りのテキストエディター)でプロジェクトファイルを編集し、アセンブリを見つけることができるパスをハードコードすることで解決しました。

お役に立てれば。

于 2010-08-17T13:43:31.353 に答える
5

Visual Studio(おそらくBlendも)の場合、以下への参照を追加する必要があります。

System.Windows.Controls.Toolkit.Internals.dll

"C:\ Program Files \ Microsoft SDKs \ Silverlight \ v4.0 \ Toolkit \ Apr10 \ Bin \ System.Windows.Controls.Toolkit.Internals.dll"

于 2010-07-13T06:02:36.517 に答える
1

私はSilverlight5ツールキットを使用しており、Expression Blend for SL 5でツールキットコントロールXamlParseExceptionを使用するとBusyIndicator、上記のすべてのソリューションは役に立ちませんでしたが、別の回避策を見つけました。かなり汚れていますがBusyIndecator、ExpressionBlendで作業できます。

  1. コントロールから派生

    public class BusyIndicatorEx : BusyIndicator
    {
        public BusyIndicatorEx()
        {
            this.DefaultStyleKey = typeof(BusyIndicatorEx);
        } 
    }
    
  2. 派生コントロールのスタイルを作成します(スタイルをBusyIndicatorソースコードからthemes / generic.xamlにコピーし、ターゲットタイプをに変更するだけですlocal:BusyIndicatorEx

于 2012-04-09T11:46:52.487 に答える
0

ラップパネルの背後にあるコードにダミー参照を導入することで解決された同じ問題がありました。

少しC++yであることは知っていますが、トップレベルページではなくテンプレート内にパネルをラップする間接参照があるため、ローダーは初期化時に何をロードするかわからないためだと想像できます。しかし、私は正確な理由を理解するのが本当に好きです。

System.Windows.Controls.Toolkitコードビハインドで次のメンバーを参照して紹介しました。

System.Windows.Controls.WrapPanel _dummy;
于 2012-12-01T18:24:54.913 に答える