C # 코드에서 wpf의 ResourceDictionary에 어떻게 액세스 할 수 있습니까?
I는 한 DataTemplate
내가 C # 코드를 통해 액세스하려는하는 XAML 파일에 정의. 누구든지 액세스 할 수있는 방법을 알려주시겠습니까? 새 ResourceDictionary
파일을 추가 했고 그 이름은 Dictionary1.xaml 입니다. 다음과 같은 데이터 템플릿이 있습니다.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="mytemplate">
<TextBlock Text="Name:" Background="Blue"/>
</DataTemplate>
</ResourceDictionary>
나는 ListBox
listBox1이라는 이름을 가지고 있지 않고 그것을 Itemtemplate
속성 에 할당하고 싶지만 어떻게 할 수 있습니까?
정확히 어디에 정의하고 있습니까?
개체의 ResourceDictionary에서 정의하면
Application.Current.Resources[typeof(yourDataTemplateTargetType)]
작동해야합니다. ItemsControl과 같은 다른 항목의 구성원으로 정의하는 경우 ItemsControl 인스턴스에 대한 핸들을 가져와 ItemTemplate 속성을 호출해야합니다.
편집 : 좋아, 나는 우리가 어딘가에 있다고 생각합니다. 따라서 자체 파일에 ResourceDictionary를 정의하고 있습니다. UI에서 사용하고 코드 뒤에서 액세스하려면 먼저 해당 ResourceDictionary를 애플리케이션에 병합해야합니다. 이거하는거야?
그렇다면 다음 단계는이 리소스를 얻는 것입니다. 각 FrameworkElement에는 FindResource 라는 메서드가 있습니다. 이 메서드는 ResourceDictionary 트리를 살펴보고 키를 사용하여 리소스를 찾으려고하기 때문에 유용합니다. 따라서 UserControl에서이 리소스에 액세스하려면 코드 숨김에서 다음을 수행 할 수 있습니다.
FindResource(typeof(yourDataTemplateTargetType));
이것이 작동하지 않는 경우이 리소스 사전을 선언하는 방법과 응용 프로그램의 리소스에 병합되는 방법을 정확히 알려주십시오.
Application.Current
제 경우에는 null 이기 때문에 다음 을 사용했습니다.
var myResourceDictionary = new ResourceDictionary();
myResourceDictionary.Source =
new Uri("/DllName;component/Resources/MyResourceDictionary.xaml",
UriKind.RelativeOrAbsolute);
그런 다음 사용하여 필요한 지정된 키를 얻습니다. myResourceDictionary["KeyName"] as TypeOfItem
( 출처 )
예를 들어 App.xaml 파일의 리소스 사전에 Button에 대한 템플릿이있는 경우 다음 코드를 사용하여 액세스 할 수 있습니다.
Application.Current.Resources[typeof(Button)]
다음과 같이 프로젝트에 추가 한 리소스 사전에 액세스 할 수 있습니다.
var rd = new ResourceDictionary();
rd.Source = new Uri("ms-appx:///Dictionary1.xaml");
그런 다음 다음과 같이 리소스 사전에 저장된 리소스에 액세스 할 수 있습니다.
someObject.Property = rd["mytemplate"];
참고 :
프로젝트의 기본 디렉터리를 기준으로 만든 위치에 따라 리소스 사전에 대한 URI를 수정해야합니다.
위의 접근 방식 중 하나는 위치를 기반으로 리소스를 가져 오는 데 작동합니다. MVVMm을 따르는 경우이 방법을 사용하는 것이 좋습니다.
- ProvideDataTemplateService와 같은 서비스를 만듭니다 (일반적으로 Behavior에서 상속하는 서비스를 만들려면)
- 선택한 컨테이너를 사용하여 DataTemple에 에이스를 갖고 싶은 곳에이 서비스를 삽입합니다.
'Program Tip' 카테고리의 다른 글
ListBox 항목에 대한 DataTemplate의 IsSelected에 대한 WPF 트리거 (0) | 2020.12.11 |
---|---|
gcov 기호는 어디에 있습니까? (0) | 2020.12.11 |
Html Agility Pack은 여전히 최고의 .NET HTML 파서입니까? (0) | 2020.12.11 |
InnoDB가 테이블 / 테이블에서 외래 키를 다시 확인하도록 강제합니까? (0) | 2020.12.11 |
sed 특정 문자열을 포함하지 않는 줄 삭제 (0) | 2020.12.11 |