次のようにウィンドウリソースでカスタムコレクションを定義しています(Sketchflowアプリで、実際にはウィンドウはUserControlです):
<UserControl.Resources>
<ds:MyCollection x:Key="myKey" x:Name="myName" />
</UserControl.Resources>
コードビハインドでこのコレクションを参照できるようにしたいのですが、これはx:Nameによるものと予想されますが、アクセスできないようです。
私はそれを参照することができます
myRef = (MyCollection) this.FindName("myKey");
しかし、これはハックのようです。これは悪い習慣ですか、何が良いでしょうか?ありがとう:)
_System.Windows.Controls.UserControl
_のFindResource()
またはTryFindResource()
メソッドを使用する必要があります。
また、キーの名前をリソースディクショナリにマッピングする文字列定数を作成することをお勧めします(1か所でのみ変更できるように)。
this.Resources["mykey"]
を使用することもできます。私はそれがあなた自身の提案よりもはるかに良いとは思いません。
直接的な答えではありませんが、強く関連しています:
リソースが別のファイルにある場合-ResourceDictionary.xamlなど
x:Class
を追加するだけです:
<ResourceDictionary x:Class="Namespace.NewClassName"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml" >
<ds:MyCollection x:Key="myKey" x:Name="myName" />
</ResourceDictionary>
次に、コードビハインドで使用します。
var res = new Namespace.NewClassName();
var col = res["myKey"];
他のクラス(xamlコードビハインドではないなど)からリソースにアクセスする場合は、次を使用できます。
Application.Current.Resources["resourceName"];
System.Windows
名前空間から。
次のようなリソースキーを使用できます。
<UserControl.Resources>
<SolidColorBrush x:Key="{x:Static local:Foo.MyKey}">Blue</SolidColorBrush>
</UserControl.Resources>
<Grid Background="{StaticResource {x:Static local:Foo.MyKey}}" />
public partial class Foo : UserControl
{
public Foo()
{
InitializeComponent();
var brush = (SolidColorBrush)FindResource(MyKey);
}
public static ResourceKey MyKey { get; } = CreateResourceKey();
private static ComponentResourceKey CreateResourceKey([CallerMemberName] string caller = null)
{
return new ComponentResourceKey(typeof(Foo), caller); ;
}
}