lsirikh / ProperyExplorerTest

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

Code review #12

Closed lsirikh closed 3 years ago

lsirikh commented 3 years ago

안녕하세요. 에로로님

이번 내용은 방법론적(?) 기술 문의를 드리고자 합니다.

제가 도형을 회전하는 기능을 넣으려고 하는데요.

일단 Width와 Height 가 있는 도형에만 의미가 있긴하지만요(선은좀 애매한 느낌이...)

일단 Rectangle을 예로 들면,

회전을 80도 하면 회전이 되도록 구성은 했습니다. PropertyExplorer에 속성을 추가했고요.

하지만, 회전시 부모 Visualtree에서 회전시 Width와 Height가 변경되는 것을 재 계산해주는 로직이 없어서

따로 노는 문제가 있더라구요. 그 부분은 제가 컨버터를 써서 해결은 했습니다.

그런데, 각도를 회전하게 되면, Desired Size가 줄어드는 문제가 있더라구요.

제가 이런저런 이유를 근거로 해서 테스트를 해봤는데, 도저히 모르겠더라구요.

인터넷으로 찾아보기도 힘든 내용이라서 부득이하게 다시 질문은 드립니다..

시간되시면 리뷰 부탁드립니다.

감사합니다.

좋은 하루되세요~

Cap 2021-10-16 22-37-33-123 Cap 2021-10-16 22-38-51-097 Cap 2021-10-16 22-39-10-217

Cap 2021-10-16 22-39-41-840 .

shwlee commented 3 years ago

뭔가 당연한 결과 같은데요.

DesiredSize 의 용도가 뭐라고 생각하시나요? 그리고 그게 언제 결정된다고 생각하시나요?

그럼 한 가지 의문이 듭니다. 애초에 부모 패널의 크기를 자식 의 대각선 크기 보다 크게 잡으면 되지 않을까요? 그러면 굳이 부모 패널의 크기를 조정할 필요가 없겠죠? 대신 이 상황에서는 자식의 크기 변동에 부모도 함께 변경되어야 할 거 같네요.

그게 싫다면 부모 패널이 자식의 크기 여부와 상관없는 패널로 만들어 주면 될 거 같은데요. 그러면 이 때는 자식의 크기, 회전 변경 시 자식의 위치를 부모 패널에 적당한 곳으로 이동시켜야 할 거구요.

저 같으면 부모 패널을 자식에 fit 시키고 부모의 크기와 회전을 조절할 거 같네요. 그리고 부모 자체에는 별다른 view 나 기능을 넣지 않을 거 같습니다.(부모는 투명하게) 사용자에게 부모의 존재를 알릴 필요가 없으니까요. 혹시 이 때 추가적인 기능, 예를 들면 resizing 을 위한 tracker 같은 게 필요하다면 자식의 가장 높은 ZIndex 위치에 추가한 후 각 tracker 의 조작이 부모의 크기와 회전에 적용되도록 할 거 같습니다.(PPT 처럼요.)

사실 이건 기획 의도가 더 중요한 문제입니다. 적절한 방향이 어떤 것인지 생각해 보는 게 어떨까요?

lsirikh commented 3 years ago

답변 감사드립니다.

DesiredSize 의 용도가 뭐라고 생각하시나요? 그리고 그게 언제 결정된다고 생각하시나요?

이게 사실 제가 생각한 결론은 처음에 Rotate하기전에 부모의 사이즈를 가지고 들어가면서 회전을 하고 그 결과가 자식의 DesiredSize로 반영이 된다고 생각했어요. 실제 그런거 같더라구요. 그런데 현재 구조는 자식이 변경된 후에 부모가 자식의 상황을 반영해서 부모사이즈가 나중에 바뀌는 구조다보니까 이런 문제가 발생하는 것 아닌가 싶더라구요.

애초에 부모 패널의 크기를 자식 의 대각선 크기 보다 크게 잡으면 되지 않을까요? 그러면 굳이 부모 패널의 크기를 조정할 필요가 없겠죠? 대신 이 상황에서는 자식의 크기 변동에 부모도 함께 변경되어야 할 거 같네요.

맞는 말씀입니다. 그런데 이렇게 하면 뭔가 좀 깔끔하지 않은 것 같은 느낌이 들어서 딱 맞아 떨어지게 하고 싶더라구요. 불가능할 것 같진 않아서 시도했는데 이게 일이 커졌습니다.

저 같으면 부모 패널을 자식에 fit 시키고 부모의 크기와 회전을 조절할 거 같네요. 그리고 부모 자체에는 별다른 view 나 기능을 넣지 않을 거 같습니다.(부모는 투명하게) 사용자에게 부모의 존재를 알릴 필요가 없으니까요.

저도 이렇게 해보고 싶은데요... 어떻게 접근을 해야될지 모르겠더라구요.

제가 주말동안 계속 이렇게 저렇게바꾸고 해봤는데 도저히 해결이 어렵더라구요. 좀 더 구체적인 힌트는 어려울까요? 저는 회전값이 변경되면, 먼저 부모의 Grid 크기를 변경하고 회전 이벤트를 진행하고 싶은데요.

    <DataTemplate DataType="{x:Type propertyModels:DoublePropertySet}">
        <TextBox Text="{Binding Value, UpdateSourceTrigger=PropertyChanged}" />
    </DataTemplate>

여기에 이벤트를 넣어서 ShapeAngle의 값이 들어오면, 부모 크기를 바꾸도록 해야될까요? 이것도 뭔가 애매하네요..

혹시 가능하시면 검토 부탁드립니다~

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

LayoutTransform으로 너무 깔끔하게 해결되버렸습니다.ㅠㅠ

shwlee commented 3 years ago

해결하셨다니 다행입니다.

해결하신 방법을 올려보시겠어요?