문제
구현해야합니다 Canvas
크기에 따라 내용물을 조정합니다. 나는 있다는 것을 알고있다 Viewbox
, 그것은 그것의 내부의 모든 것을 조정합니다. 그러나 일부 요소는 고정 된 크기가 있고 스케일링 할 수 없기 때문에 사용할 수 없습니다.
또한 크기를 어떻게 바인딩 할 수 있습니까? Canvas
상위 요소 (예 : 저지 가능한 창)에. Windows 용 Sizetocontent가 있습니다. 크기가 다른 방식으로 정확하게 맞는 것을 원합니다. 또한 캔버스는 호스팅 요소의 크기를 기준으로 일부 도면을 사용합니다. RedRaw는 어떻게 트리거되고 유효한 (또는 최소) 크기를 얻는 경우에만 그릴 수 있습니까?
해결책
캔버스에 너비 나 높이를 지정하지 않으면 사용 가능한 모든 공간을 자동으로 사용합니다. 기본값이기 때문입니다 VerticalAlignment
그리고 HorizontalAlignment
설정됩니다 Stretch
.
캔버스는 일부 내용물을 고정 크기로 확장하지 않고 크기에 따라 내용물을 조정한다는 의미는 무엇입니까?
댓글 후 업데이트
드로잉 알고리즘이 이미 캔버스 높이와 너비로 컨텐츠를 조정하는 경우 캔버스를 내가 믿는 영역에 맞게 크기를 조정하는 것입니다. 이 경우 하드 코드 높이/너비 값을 제거하면 캔버스가 컨테이너에 맞게 크기를 조정합니다.
그래도 드로잉 알고리즘에서 높이/너비 대신 실제 상상/실제 폭을 사용해야 할 수도 있습니다. 실제 상하/실제 폭은 레이아웃 컨테이너가 캔버스를 제공하는 값을 반환하므로 캔버스가 그려진 값을 나타냅니다.
다른 팁
내 모든 질문에 대한 답을 찾을 수 있다고 생각합니다. 런던 지하 데모.
메모리 에서이 작업을 수행하지만 창이 올바르게 리콜되는 경우 창이 패널이나 캔버스를 ContronTemplate (ContentPresenter에 위치)의 일부로 사용합니다. 이는 창에 직접 배치 된 캔버스가 자동으로 해제되는 문제가 있음을 의미합니다. 다른 곳에서처럼. 이를 해결하는 몇 가지 기본 방법이 있습니다.
1 창을 사용할 수 있도록 새 ControlTemplate을 작성하십시오. :(
2 창의 캔버스가 아닌 창에 직접 콘텐츠를 배치하십시오. :/
3 이름의 바인딩을 수행합니다. :)
<MyWindow x:Name="topWindow">
<Canvas x:Name="topCanvas" Width="{Binding ElementName=topWindow, Path=ActualWidth}" Height="{Binding ElementName=topWindow, Path=ActualHeight}">
...Content...
</Canvas>
</MyWindow>
(이런 일이 발생하면, 나는 종종이 방식으로 캔버스 내부의 그리드를 바인딩하므로 한 그리드 위치에서 다른 그리드 위치로 이동하는 항목을 쉽게 애니메이션 할 수 있습니다.)