Немного опоздал с ответом, но это могло бы принести пользу другим.
Ресурс, к которому вы пытаетесь получить доступ, на уровне темы , чтобы получить к нему доступ из любой точки вашей сборки, он должен быть идентифицирован посредством ComponentResourceKey:
<Style TargetType="{x:Type TreeViewItem}"
x:Key="{ComponentResourceKey {x:Type local:MyTVIStyleSelector}, tviBaseStyle}">
<!-- style setters -->
</Style>
тогда в вашем XAML вы будете ссылаться на это так:
<Style TargetType="{x:Type TreeViewItem}"
x:Key="{ComponentResourceKey {x:Type local:MyTVIStyleSelector}, tviStyle_1}"
BasedOn={StaticResource {ComponentResourceKey {x:Type local:MyTVIStyleSelector}, tviBaseStyle}}>
<!-- style setters -->
</Style>
и в вашем коде так:
ComponentResourceKey key = new ComponentResourceKey(typeof(MyTVIStyleSelector), "tviStyle_1");
Style style = (Style)Application.Current.TryFindResource(key);
Существует также многословная форма синтаксиса XAML, которая выглядит следующим образом (но это одно и то же):
<Style TargetType="{x:Type TreeViewItem}"
x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:MyTVIStyleSelector}, ResourceId=tviBaseStyle}">
<!-- style setters -->
</Style>
Обратите внимание, что хотя TypeInTargetAssembly должна быть установлена, она не ограничивает доступ к этому ресурсу для других типов в сборке.