다음과 같은 부모 뷰가 있으며 콘텐츠 컨트롤을 포함합니다.
<ScrollViewer Grid.Column="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<ContentControl Name="RobotWorkingArea" IsEnabled="{Binding IsRobotAreaEnabled}" Content="{Binding RobotAreaViewModel}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</ScrollViewer>
로봇 작업 영역을 확대 / 축소 할 수 있어야하므로 그리드의 배율 변환을 사용합니다. 이는 마우스 휠 이벤트가 발생하면 변경됩니다.
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.RenderTransform>
<ScaleTransform ScaleX="{Binding RenderScaleX}" ScaleY="{Binding RenderScaleY}"/>
</Grid.RenderTransform>
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseWheel">
<ei:CallMethodAction MethodName="ChangeRenderSize" TargetObject="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView ItemsSource="{Binding PlacementConfiguration.EquipmentPlacementList}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
SelectionMode="Single" Width="{Binding RobotAreaWidth}" Height="{Binding RobotAreaHeight}">
...
...
...
이것은 (지금까지 잘 작동 ChangeRenderSize()
방법은 간단하게 값을 변경 RenderScaleX
하고 RenderScaleY
마우스 휠 방향 기준), 그러나이 ScrollViewer
내 부모 뷰에서 업데이트하지 않고 아이 뷰의 새로운 크기로 변경합니다. 이로 인해 확대하면 전체 영역에 도달 할 수없고 축소하면 배경이 흰색이고 ScrollViewer
고정 된 크기로 유지됩니다.
내 생각 엔 부모는 속성 변경 이벤트를 보지 못하기 때문에 자식의 현재 크기를 알지 못합니다. 이제 질문은 다음과 같습니다.
RenderScaleX
및 RenderScaleY
부모 뷰를?LayoutTransform
대신 속성을 사용하십시오 RenderTransform
.
<Grid.LayoutTransform>
<ScaleTransform ScaleX="{Binding RenderScaleX}" ScaleY="{Binding RenderScaleY}"/>
</Grid.LayoutTransform>
RenderTransform
렌더링에만 적용되며 레이아웃에 영향을 ScrollViewer
미치지 않으므로 예상대로 작동하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다