Program Tip

WPF의 코드 숨김을 통해 리소스에 액세스

programtip 2020. 11. 27. 21:13
반응형

WPF의 코드 숨김을 통해 리소스에 액세스


다음과 같이 내 창 리소스에 사용자 지정 컬렉션이 정의되어 있습니다 (Sketchflow 앱에서 창은 실제로 UserControl 임).

<UserControl.Resources>
    <ds:MyCollection x:Key="myKey" x:Name="myName" />
</UserControl.Resources>

x : Name으로 예상되는 코드 숨김에서이 ​​컬렉션을 참조 할 수 있기를 원하지만 액세스 할 수없는 것 같습니다.

나는 그것을 사용하여 참조를 얻을 수 있습니다.

myRef = (MyCollection) this.FindName("myKey");

그러나 이것은 엉망인 것 같습니다. 이것은 나쁜 습관이며 무엇이 더 좋을까요? 감사 :)


System.Windows.Controls.UserControlFindResource()또는 TryFindResource()메서드를 사용해야 합니다.

또한 리소스 딕셔너리에서 키 이름을 매핑하는 문자열 상수를 만드는 것이 좋습니다 (한곳에서만 변경할 수 있도록).


을 사용할 수도 있습니다 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"];

다음과 같은 리소스 키를 사용할 수 있습니다.

<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); ;
    }
}

xaml 코드 숨김이 아닌 다른 클래스의 리소스에 액세스하려면 다음을 사용할 수 있습니다.

Application.Current.Resources["resourceName"];

에서 System.Windows네임 스페이스.

참고 URL : https://stackoverflow.com/questions/2117886/accessing-a-resource-via-codebehind-in-wpf

반응형