私は WPF アプリケーションを開発しており、カスタム コントロールを作成しました。これを「CControl」と呼びます。アプリケーションのレイアウトを設計している xaml ドキュメント。私はスタイルをインポートします:
xmlns:my="clr-namespace:My.Controls"
そして、コントロールをうまく使うことができます。問題は、CControl でスタイルを拡張したいということです。リソース ディクショナリでは、次のように設定できます。
<Style TargetType="{x:Type my:CControl}">
<Setter Property="Margin" Value="5 0 5 3" />
</Style>
これにより、コントロールにスタイルが適用されますが、CControl で定義されたスタイルはインポートされないため、次を使用します。
<Style TargetType="{x:Type my:CControl}" BasedOn="{StaticResource {x:Type my:CControl}}">
<Setter Property="Margin" Value="5 0 5 3" />
</Style>
問題は、フレームワークが xaml をロードしようとすると、次の例外が発生することです。
System.Windows.Markup.XamlParseException occurred
Message='Provide value on 'System.Windows.StaticResourceExtension' threw an exception.' Line number '18' and line position '54'.
Source=PresentationFramework
LineNumber=18
LinePosition=54
StackTrace:
at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, Boolean skipJournaledProperties, Uri baseUri)
at System.Windows.Markup.XamlReader.Load(XamlReader xamlReader, ParserContext parserContext)
at System.Windows.Markup.XamlReader.Load(XamlReader reader)
at FATPOT.Whiteboard.Report.Show() in C:\...\Report.cs
InnerException:
Message=Cannot find resource named 'My.Controls.CControl'. Resource names are case sensitive.
Source=PresentationFramework
StackTrace:
at System.Windows.StaticResourceExtension.ProvideValueInternal(IServiceProvider serviceProvider, Boolean allowDeferredReference)
at System.Windows.StaticResourceExtension.ProvideValue(IServiceProvider serviceProvider)
at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider)
InnerException:
BasedOn を使用するさまざまな方法を試しましたが、何も機能しませんでした。どんな助けでも非常に役に立ちます。
ありがとう
ジョシュ