理解できない WPF の問題があります - 誰でも助けてもらえますか?
以下の WPF は、標準の TabControl の ContentTemplate として使用され、ResourceDictionary 内に存在します。MyElementItemsControl は ItemsControl の単純な派生物であり、MyDesignCanvas は Canvas の単純な派生物です。
<DataTemplate x:Key="TabContent" x:Shared="False">
<Grid>
<Grid Grid.RowSpan="2">
<ScrollViewer x:Name="contentScrollViewer" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" >
<Grid>
<View:MyElementItemsControl BorderBrush="Transparent" x:Name="schedulePanel" ItemsSource="{Binding Path=Elements}" Background="White">
<View:MyElementItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<View:MyDesignCanvas Height="1000" Width="1000" HorizontalAlignment="Left" VerticalAlignment="Top"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
Background="Transparent">
</View:MyDesignCanvas>
</ItemsPanelTemplate>
</View:MyElementItemsControl.ItemsPanel>
</View:MyElementItemsControl>
<Grid.LayoutTransform>
<TransformGroup>
<ScaleTransform>
<ScaleTransform.ScaleX>
<Binding ElementName="SlideZoom" Path="Value" Mode="OneWay"/>
</ScaleTransform.ScaleX>
<ScaleTransform.ScaleY>
<Binding ElementName="SlideZoom" Path="Value" Mode="OneWay"/>
</ScaleTransform.ScaleY>
</ScaleTransform>
</TransformGroup>
</Grid.LayoutTransform>
</Grid>
</ScrollViewer>
</Grid>
<Slider Opacity="0.5" VerticalAlignment="Top" HorizontalAlignment="Left" Width="300" Grid.Row="1" Name="SlideZoom" Orientation="Horizontal" Minimum="0.1" Maximum="3" Value="1">
</Slider>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
</Grid>
</DataTemplate>
コードを実行すると、理解できない 2 つの問題が発生します。
- アイテムごとに ScrollViewer が期待される場合、単一の ScrollViewer しか取得できないようです。したがって、2 つのタブ項目を追加してキャンバスを異なるサイズにすると、スクロール バーは最大のキャンバスのサイズのみに調整されます。Shared=False 属性によって、タブごとにテンプレートの新しいインスタンスが作成されると予想していました。
- おそらく項目1に関連しています- MyDesignCanvas のコンストラクターにブレークポイントを設定すると、最初のタブが追加されたときにヒットしますが、他のタブが追加されたときにはヒットしません。タブを閉じ始めたときにのみ、ブレークポイントが再びヒットします。タブを追加するたびにヒットすると予想されます。
私はデータ テンプレートを十分に理解していないと思うので、誰かが何が起こっているのか説明したり、これを診断するのに役立つリソースを教えてくれませんか?
ありがとう