안녕하세요. 아발로니아를 이용해서 프로그램을 하나 짜고 있는데 유저컨트롤 하나 생성할때 마다 스트레스를 받네요. axmls 구성화면이 로딩이 됐다 안됐다 하는데 이거 왜 그런건가요?? 재빌드를 해도 에러는 안뜨는데 화면구성을 바꾸려 axml 파일만 클릭하면 Cannot resolve type 이라면서 name에 < , ’ ’ 이 들어있다고 하면서 에러가 뜨는데 하… 이거 해결방법이 없을까요??
아발로니아의 axaml 프리뷰는 WPF의 xaml과 달리 실제로 프로젝트를 컴파일해서 실행한 것과 비슷하게 작동합니다. 그래서 axaml에 오류가 있다거나 .axaml.cs에 오류가 있거나 또는 디자인 타임에서 실행될 경우 문제가 되는 코드가 있을 경우 에러가 발생합니다.
처음 개발할 때는 이런 부분들이 좀 불편했었는데 좀더 사용하다보니까 어떤 경우에 에러가 나고 어떻게 해야 해결되는지 파악이 되어서 불편함이 꽤 줄었습니다. Visual Studio 2015의 블렌드에서 뭐가 문제인지 빌드만 하면 XAML 프리뷰 프로세스가 몇 분 이상 먹통되는 것에 비한다면 WPF보다 나쁘다고 보기도 어렵고 Design.DataContext와 Compiled Binding을 잘 사용하면 ViewModel 바인딩은 더 편리했습니다. 정말로 블렌드는 Expression Blend 4가 제일 안정적이고 빠르고 좋았는데 그 이후 Visual Studio에 통합되면서 여러가지 면에서 퇴보하여 .NET Framework 4.5 이상으로 WPF 개발시 스트레스 받아왔네요.
제 경우 보통 다음과 같이 했습니다.
-
UserControl 생성 후 기본 네임스페이스 등을 변경하면 바로 반영이 안되는 경우가 있어서 이 경우에는 clean 후 빌드를 합니다. 이래도 안되면 clean 후 빌드하고 비주얼 스튜디오를 종료 후 다시 실행합니다. 이렇게 하면 axaml이나 axaml.cs에 문제가 없는 경우에는 정상적으로 표시됩니다.
-
.axaml.cs 파일 내의 초기화 코드에 디자인 타임을 구분하도록 합니다.
다음과 같이 말이죠. 특히 ViewModel관련 코드 초기화 관련 코드가 디자인타임에 실행될 경우 어떤 기능을 구현했느냐에 따라 에러가 나는 경우가 있습니다.
public MainView()
{
InitializeComponent();
if (!Design.IsDesignMode)
{
//디자인 타임에 실행되면 안되는 초기화 코드를 여기에 추가합니다.
}
}
- 이 외에는 실제로 axaml을 잘못 작성한 경우 - 예를 들면 WPF에서는 Visibility이지만 아발로니아에서는 IsVisible인 것처럼 없는 속성을 정의한 경우 등 에 에러가 납니다. 실제로 상용 앱 하나 만든 후기를 말씀드리면 WPF와 약간 호환되지 않는 부분이 있어서 그런 부분들은 주의할 필요가 있더군요.
안녕하세요. 말씀하신것처럼 xml화면에서 컴파일된 것처럼 움직이는게 신기하더라고요 ㅎㅎ;; 다른건 다 괜찮은데 유저컨트롤만 스트레스를 주네요 ㅠㅠ 하도 안돼서 스튜디오부터 아발로니아까지 전부다 최신으로 업데이트 했더니 빈도가 줄긴했는데 또 안되면 말씀해주신 방법으로 해보겠습니다. 감사합니다~!