Canvas の ItemsPanelTemplate を持つ ListBox があります。高さと幅が指定されていない限り、ScrollViewer が Canvas で機能しないことはわかっています。常に一定であるとは限らないため、キャンバスに高さと幅を与えたくありません。この状況で誰かが働いた他の回避策やトリックはありますか。この問題を抱えているのは私だけではないことはわかっています。これまでのところ私のコードはここにあります。
もう 1 つの問題は、ScrollViewer を ItemsPanelTemplate 内に配置できないことです。これは、要素を 1 つしかネストできないためです。
これにより、キャンバスをグリッド内に配置して配置を取得することも制限されます。
XAML:
<!--Core Viewer-->
<ScrollViewer x:Name="scrollViewer"
VerticalScrollBarVisibility="Hidden"
HorizontalScrollBarVisibility="Hidden">
<ListBox x:Name="objCoreViewer"
ItemsSource="{Binding ItemsSource}"
Background="LightGray"
SelectionChanged="objCoreViewer_SelectionChanged"
ItemTemplateSelector="{DynamicResource CoreViewerDataTemplateSelector}"
ItemContainerStyleSelector="{DynamicResource ItemContainerStyleSelector}"
PreviewMouseWheel="objCoreViewer_PreviewMouseWheel">
<!-- Core Map Canvas -->
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas x:Name="objCoreViewerCanvas"
Background="Transparent">
<Canvas.LayoutTransform>
<ScaleTransform ScaleX="{Binding Path=Value, ElementName=ZoomSlider}"
ScaleY="{Binding Path=Value, ElementName=ZoomSlider}" />
</Canvas.LayoutTransform>
</Canvas>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</ScrollViewer>