1

私はこれで終わりです。私はこれを理解しようと数え切れないほどの時間を費やしてきましたが、そのような運はありません。

問題の簡単な説明

カスタムコントロールクラス内で、Application.Current.Resources ["key"]をチェックすると、nullが返されます。この「キー」スタイルは、コントロールライブラリのthemes/generic.xamlリソースによってApplication.Current.Resourcesとマージされることになっているローカルディクショナリ内にあります。

SilverLightコントロールライブラリのthemes/generic.xamlでMergedDictionaryへの参照を参照/確認するにはどうすればよいですか。

これは可能でさえありますか、それともマージされたリソースがどのように完全にマージされると想定されているかについての私の考えは間違っていますか?

助けてください。前もって感謝します。

問題の長い説明

ControlsフォルダーとThemesフォルダーを備えたSilverlightコントロールライブラリがあります。Themesフォルダー内にgeneric.xamlがあります。その内容:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/SilverLightLib;component/Themes/EnhancedLabelDict.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

Themesフォルダー内にEnhancedLabelDict.xamlがあります。その内容:

<Style x:Key="ReadOnlyTextBox" TargetType="TextBox">
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Background" Value="#FFFFFFFF"/>
        <Setter Property="Foreground" Value="#FF000000"/>
        <Setter Property="Padding" Value="2"/>
        <Setter Property="BorderBrush">
        <!-- A lot more code -->
</Style>

これらのファイルビルドアクションは両方ともPageに設定されています。

これで、generic.xamlがリソースをロードしているかどうかさえわかりません。私が知ることができる唯一の方法は、フォーマットされていないテキストをの間に置くかどうかです。これによりエラーが発生します。

ResourceDictionaryへの誤ったパスを使用すると、実行時エラーが発生します-'プロパティへの割り当てに失敗しました'System.Windows.ResourceDictionary.Source'

Controlsフォルダー内に、ContentControlを拡張するEnhancedLabel.csがあります。コンストラクター内で、新しいTextBoxを作成し、次のようにスタイルを割り当てます。

Style style = Application.Current.Resources["ReadOnlyTextBox"] as Style;
this.textBox.Style = style;

このスタイルは、ライブラリ内にあるApp.xamlとEnhancedLabelDict.xamlの両方にあります。App.xamlでスタイルをコメントアウトすると、「ReadOnlyTextBox」スタイルが見つかりません(null)。コメントを外すと見つかります。

EnhancedLabel.cs内から自分のスタイルを参照できない理由がわかりません。

EnhancedLabelDict.xamlを取得した場合は、メインアプリケーション内のResourcesフォルダー内のThemesフォルダーに追加します。次に、App.xamlに次を追加します。

<ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/SilverLightPOC;component/Resources/Themes/EnhancedLabelDict.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

私のコントロールは機能します!したがって、パス以外に違いはありません。しかし、ライブラリが依存する辞書ファイルをメインアプリケーション内に保存する必要がないため、これは機能しません。

助けてください。

4

1 に答える 1

0

ネストされた辞書の深さが 3 レベルを超えると、Silverlight に最適化のバグが発生します。回避策を使用しない限り、辞書は読み込まれません。

マージされたディクショナリへのマージされたディクショナリの追加を参照 してください

于 2013-03-15T07:15:49.547 に答える