WPF에서 리소스 사전 뒤에 코드를 설정할 수 있습니까? 예를 들어 버튼에 대한 사용자 정의 컨트롤에서는 XAML로 선언합니다. 버튼 클릭에 대한 이벤트 처리 코드는 컨트롤 뒤에있는 코드 파일에서 수행됩니다. 단추를 사용하여 데이터 템플릿을 만드는 방법은 리소스 사전 내에서 단추를 클릭하는 방법에 대한 이벤트 처리기 코드를 작성하는 방법입니다.
나는 당신이 ResourceDictionary를위한 코드 숨김 파일을 원한다고 생각하고 있다고 생각한다. 당신은 완전히 이것을 할 수 있습니다! 실제로, 당신은 Window와 같은 방법으로 그것을합니다 :
MyResourceDictionary라는 ResourceDictionary가 있다고 가정 해보십시오. MyResourceDictionary.xaml 파일에서 다음과 같이 x : Class 특성을 루트 요소에 넣습니다.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyCompany.MyProject.MyResourceDictionary"
x:ClassModifier="public">
그런 다음 MyResourceDictionary.xaml.cs라는 코드 숨김 파일을 다음 선언과 함께 만듭니다.
namespace MyCompany.MyProject
{
partial class MyResourceDictionary : ResourceDictionary
{
public MyResourceDictionary()
{
InitializeComponent();
}
... // event handlers ahead..
}
}
그리고 너 끝났어. 코드, 메서드, 속성 및 이벤트 처리기에 원하는 것을 넣을 수 있습니다.
== Windows 10 앱 업데이트 ==
그리고 만약 당신이UWP알고 있어야 할 것이 하나 더 있습니다.
<Application x:Class="SampleProject.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:rd="using:MyCompany.MyProject">
<!-- no need in x:ClassModifier="public" in the header above -->
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- This will NOT work -->
<!-- <ResourceDictionary Source="/MyResourceDictionary.xaml" />-->
<!-- Create instance of your custom dictionary instead of the above source reference -->
<rd:MyResourceDictionary />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
x:Class="MyCompany.MyProject.MySubFolder1.MyResourceDictionary"
그렇지 않으면 x : Class = " MyResourceDictionary " 만 입력하면 xaml 파서가 클래스를 찾지 않습니다. - viggity
나는 "ageektrapped"에 동의하지 않습니다 ... 부분 클래스의 메서드를 사용하는 것은 좋은 습관이 아닙니다. 그러면 사전을 페이지에서 분리하는 목적은 무엇입니까?
코드 숨김에서 다음을 사용하여 x : Name 요소에 액세스 할 수 있습니다.
Button myButton = this.GetTemplateChild("ButtonName") as Button;
if(myButton != null){
...
}
넌 할 수있어이OnApplyTemplate 메서드에서 사용자 지정 컨트롤이로드 될 때 컨트롤에 연결하려는 경우. 이 작업을 수행하려면 OnApplyTemplate을 재정의해야합니다. 이것은 일반적인 관행이며 스타일을 컨트롤에서 분리 된 상태로 유지합니다. (스타일은 컨트롤에 의존해서는 안되지만 컨트롤은 스타일을 가지고 있어야합니다.)
기슈 (Gishu) - "일반적으로 권장되지 않는 연습"이 아닌 것처럼 보일 수도 있습니다. 다음과 같은 이유 중 하나가 있습니다.
텍스트 상자에 포커스가있을 때의 표준 동작은 컨트롤이 포커스를 잃을 때와 같은 위치에 캐럿을 배치하는 것입니다. 응용 프로그램 전체에서 텍스트 상자의 전체 내용이 강조 표시된 텍스트 상자로 이동할 때 리소스 사전에 간단한 핸들러를 추가하면 트릭을 수행하는 것이 더 좋을 것입니다.
기본 사용자 상호 작용 동작을 초기 동작과 다르게하려는 다른 이유는 리소스 사전에있는 코드의 좋은 후보와 같습니다.
응용 프로그램 기능에 특정한 것이 리소스 사전의 코드 뒤에 있지 않아야한다는 것에 전적으로 동의하십시오.
XAML은 코드를 포함하지 않는 개체 그래프를 구성하기위한 것입니다.
데이터 템플릿은 사용자 정의 사용자 객체를 화면에 렌더링하는 방법을 나타내는 데 사용됩니다 (예 : 목록 상자 항목 인 경우). 비헤이비어는 데이터 템플릿의 전문 분야가 아닙니다. 솔루션 다시 그리기 ...