WPF 어렵네요

MVVM 같은 생소한 패턴도 어렵지만

@jamesnet214 소스를 Clone 하면서 느낀것지만

기존에 priism 을 다루면서 이제 잘안쓰시는것 같더군요

왠만한것 다 커스텀 하신것 가은데

이렇게 생짜로 class 라이브러리를 wpf 모듈을 만들때

image

이렇게 생성됍니다. 그리고 여기에
csproj 파일에

    <PropertyGroup>
        <TargetFramework>net8.0-windows</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
        <UseWPF>true</UseWPF>
        <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    </PropertyGroup>

이렇게 해주어야 합니다.
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

이 구문은 wpf 템플릿을 사용하면 안해도 되지만 해줘야 파일추가시 wpf 템플릿을 선택 가능하라구요

그리고
image

그리고 이렇게 Properties 폴더를 만들고 어플리케이션에서 쓰는
성격이나 리소스 파일을 넣어놓아야 하고

image
화면 하나를 만들기위해 이렇게 많은 파일이 필요하네요

처음에는 저 구조가 이해가 안가서 헤매고 windows 는 도대체 어디있는것야
했는데 window 개념보다 VIEW 개념으로 접근하시는것 같더군요

    public class HomeContent : WPFView
{
	public HomeContent()
	{
		DefaultStyleKey = typeof(HomeContent);
	}

따라한다고 이렇게 했지만 솔직히 “DefaultStyleKey” 이건 무엇인지 모르겠습니다 ^^

그리고 Theme 폴더에
ResourceDictionary 로 구성해놓으셨는데 도대체
어디서 매인 content 를 놓는지 몰라서 헤맸는데

<Style TargetType="views:HomeContent">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="views:HomeContent">
                <Grid Style="{StaticResource MainGridStyle}"    >
                    <Grid.RowDefinitions>
                        <RowDefinition Height="2"/>
                        <RowDefinition Height="500"/>
                        <RowDefinition Height="1"/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>  
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

대략 이런식으로 핵심 Node이고 저기서 디자인을 하더군요
기존에 여기서 벽에 부딧친것이 예전에 쓰던
interative 속성은(Loaded 이벤트 같은것) 어떻게 써야 하는지

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:james="clr-namespace:Jamesnet.Windows;assembly=Jamesnet.Windows"
  xmlns:feature="clr-namespace:NP.Support.UI.Features;assembly=NP.Support"
  xmlns:tray="http://schemas.lepo.co/wpfui/2022/xaml/tray"
  xmlns:sys="clr-namespace:System;assembly=System.Runtime"
  xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"                    
  xmlns:views="clr-namespace:NP.Home.Views

XML 의 Processing 지시자라고 하나요 xml 이라 잘 와닿지 않고
url 로 alias 되있어서 헷갈립니다. 저걸 정의할려면 위에 properties
에 assemblyinfo.cs 에서 하더군요;;;

무엇보다 generic.xaml

image

이건 파일은 생성했지만 왜 자동 적용되는지 모르겠습니다 ^^


대략 따라한다고 하고있는데 james 아키텍쳐에
wpfui 를 입히다고 하고있는데

Navigation control에서 벽에 부딧쳤습니다.

여기서 핵심은 처음에는 기존에 알고있던 prism 이나 일반적인 방식으로 개발할려고 했는데
저런 구조가 요즘 최신 트렌드인 winui 같은것으로 이전이 쉽다고 해서 안좋은 머리로 헤매고
있습니다.

그리고 있는 control들을 그냥 갔다 쓰다가 각 control 상속 받은 부모 속성 확인해서
하나하나 deep 하게 봐야하는점이 힘드네요

그리고 솔직히 커스텀 디자인을 할려면 특정 컨트롤 구조가 어떻게 되어있는지
다 분해해서 봐야 하는데 와 ^^;; 애니메이션은 어떻게 해야할지

근데 저 generic.xaml 은 정의된 파일 이름이라 생성하면 자동 적용 되는것인가요. ???

저구조를 따라하긴 했지만 뭔가 도식화된 그림으로 표현을 하면 더 이해가 쉬울것 같긴하네요

어려운 이유를 정리하면

  1. 개발방법이 정말 다양하다
  2. 얇게 넓게 알아야 한다.
  3. 왜?? 뭔가 자동적용되는것이 많아서 이유를 아는것이 아니라 그렇구나 하면
    양자역학적으로 생각해야 할것이 많습니다.
3개의 좋아요

의외로 gpt가 xaml을 잘 알더군요. 물어보면 대부분 답변해주는

2개의 좋아요

1. generic.xaml의 역할

  • generic.xaml은 기본 스타일과 템플릿을 정의하기 위해 사용됩니다.
  • 일반적으로 사용자 지정 컨트롤(Custom Control)을 만들 때 기본 스타일과 템플릿을 제공하기 위해 사용됩니다.

2. 자동 적용 조건

  • generic.xaml 파일은 프로젝트 내의 Themes 폴더에 있어야 합니다.
  • 반드시 Themes/generic.xaml라는 이름을 가져야 합니다.
  • 컴파일된 후 리소스 사전(Resource Dictionary)은 WPF가 컨트롤 스타일을 검색할 때 자동으로 참조됩니다.

3. 자동 적용 과정

  • WPF는 컨트롤의 DefaultStyleKey 속성을 통해 기본 스타일을 찾습니다.
  • 사용자 지정 컨트롤이 로드될 때 WPF는 generic.xaml에서 해당 컨트롤의 스타일을 자동으로 검색합니다.
  • 만약 특정 컨트롤에 대한 스타일이 generic.xaml에 정의되어 있으면, 명시적으로 참조하지 않아도 자동으로 적용됩니다.

4. 주의사항

  • 스타일 키(DefaultStyleKey)는 컨트롤의 Type이어야 합니다.
  • Application.Resources에 동일한 키가 있으면 generic.xaml의 리소스보다 우선합니다.
  • 만약 특정 리소스가 적용되지 않는다면 generic.xaml의 위치나 파일 이름이 정확한지 확인해야 합니다.

정말 그렇군요 ;;; 근데 이걸 찾아보지 않으면 모르는 내용같네요 @jamesnet214 님이 저런 구조로 만든 이유가 있었군요

4개의 좋아요

이벤트 관련해서는 아래 라이브러리를 쓰시면 되요.
이벤트를 VM에 바인딩 가능

4개의 좋아요

재웅님의 프로젝트 구조를 잘보시면
여느 MVVM과 다르게
Model 기반의 Control들을 그려내시려고 하는 흔적들이 많습니다.

이점 주의 있게 보시면 재밌습니다 :slight_smile:

3개의 좋아요

네 솔직히 프로젝트 구조나 mvvm 은 어떻게 하겠는데
디자인 커스텀 어렵고 이걸 위주로 공부하고 싶습니다
성함은 잘모르겠구 vicky 님의 유튜버 영상을 보는데 영문이긴 한데
영어공부도 되고 엄청 잘만드셨네요

3개의 좋아요

아마 그 vicky님이 @vickyqu115 님이실거같습니다 ㅎㅎ

2개의 좋아요

댓글 달 생각이 없었는데 이 부분보고 제 평소 생각과 너무 일치해서 댓글 답니다…ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
양자역학적인… 그니까 뭔가 당연한 것이고 과학적이긴 한데 도무지 이해는 안가는…ㅋㅋㅋ

4개의 좋아요

UI의 세계는 WPF 뿐만 아니라, 뭘 해도 어려운 것 같습니다.

그렇다고 다른 분야는 쉽냐… 하면, 그것도 아니죠.

알고리즘의 세계는 방대하고,
백엔드는 보안과 운영 성능에 허덕이며,
하드웨어 제어 분야도 만만치 않죠.

어려운 것을 하니까, 공부하는 것을 멈추지 않는 게 개발자인 것 같습니다.

3개의 좋아요

WinForm에 비하면 많이 어려운 것 같아요. ㅎ