lsirikh / ProperyExplorerTest

에로로님의 예제를 구현 및 응용해보자
0 stars 0 forks source link

Selection 을 지원하는 기능 구현 #6

Closed shwlee closed 2 years ago

shwlee commented 2 years ago
shwlee commented 2 years ago

이걸 하다보니 생각 났는데...

selection 과 panning 사이의 mouse capture 와 e.Handled 설정을 세팅하는 게 쉽지 않았던 걸로 기억해요. (그래서 item 내부에 자동으로 mouse capture 와 e.Handled 세팅을 하는 control이 들어있으면, 의도한대로 동작하지 않았던 걸루 기억합니다.)

그래서 아예 panning 과 selection 을 분리하도록 처리했던 거 같은데 지금 구조에서는 요정도가 되지 않을까 싶어요.

한 번 보시죵

lsirikh commented 2 years ago

와 진짜 예술입니다.

이렇게 사용할 수 있는거군요.....ㅠㅠ

몇 가지 문의 사항이 있습니다!!!

  1. 아래 코드를 통해서
    `<control:DisplayPresenter X="{Binding X.Value}" Y="{Binding Y.Value}" Label="{Binding Name.Value}"

    ` 이렇게 빼서 ContentControl을 상속받는 DisplayPresenter로 갱신해주는 역할을 만드신거죠? 전부다 DP형식이니까 OnPropertyChange같은 메소드도 필요없는건가보네요.

  2. DefaultStyleKeyProperty.OverrideMetadata...

https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.frameworkelement.defaultstylekey?view=net-5.0 설명을 봐도 한국어를 번역한거라서 그런지 전혀 이해가 안되네요. 그냥 쉽게 말해서 화면을 다시 갱신해준다 아닌가요??;;;;;;;

  1. Style.xaml은 사용 안되고, ListBox 와꾸 구성은 Generic.Xam로 바뀌었네요??

  2. "InCanvasMovingBehavior"에서 사용되는 DP들 name있잖아요?

"Captured", "PanningTarget", "X", " Y" 이렇게 등록하면... <Setter Property="behaviors:InCanvasMovingBehavior.PanningTarget" Value="{Binding RelativeSource={RelativeSource Self}}" /> 이런식으로 연결해서 활용할 수 있나보네요..ㅠㅠ

예를 들어 Rectangle 요소를 클릭하면, IsSelected의 값에 바인딩되서 Captured로 e.NewValue (셀렉팅이 바뀌면 IsSelected == true인가보네요)

  1. 그럼 InCanvasMovingBehavior에서 X, Y의 역할과 "control:DisplayPresenter" 의 역할의 차이는?? InCanvasMovingBehavior의 X, Y는 이동에만 관련되어 있고, control:DisplayPresenter에 있는 X, Y는 Canvas에 표시되는 ListBox상에 x, y값과 연관있는건가요? 잘 이해가 안갑니다...ㅠㅠ

커스텀해주셔서 감사합니다. 정말 오늘 많이 배웠습니다.

너무 감사합니다.

shwlee commented 2 years ago
  1. 맞숩니다. ~ㅁ~
  2. 뭐 사실 custom control 을 극한으로 사용하실 게 아니라면 크게 신경 안 써도 됩니다. CustomControl 을 VS 에서 new item으로 생성하면 자동으로 만들어주는 구문입니다. 정확히는, cs 파일에 있는 CustomControl 객체와 Generic.xaml 에 있는 Style 을 연결하는 구문인데 그 key 를 CustomControl의 타입으로 쓰겠다... 뭐 이런 선언 같은 겁니다. 사실 개발하면서 저걸 수정하는 일은 아마... 없을 겁니다.
  3. CustomControl 을 생성하면 VS가 자동으로 Generic.xaml 에 Style 을 추가시켜줍니다. CustomControl에 대해 좀 더 공부해보세욤 =ㅂ=
  4. InCanvasMovingBehavior 에서 binding 으로 연결한 건 DP 가 아니라 AP 입니다. AttachedProperty 욜. 요것두 공부해 보세욜
  5. 맞아욜. 좀 더 정확히는 control:DisplayPresenter 가 화면에 뿌려지는 view 입니닷
lsirikh commented 2 years ago

답변 정말 감사드립니다!!^^

넵넵 연구해보고 또 질문 드리겠습니다.

  1. -> 더 공부해보겠습니다.
  2. -> 더 공부해보겠습니다~~><

이제 저는 드래그앤드롭을 이용한 멀티셀렉팅과 마우스 휠, 캔버스 휠클릭을 이용한 확대 축소를 연구해보겠습니다.. ><

추천해주실만한 접근법이 있다면 조언 부탁드립니다.~

다시한번 감사드립니다!