Wpf Xaml, как добавить текстовый блок в Canvas с существующими элементами источника? - PullRequest
0 голосов
/ 27 февраля 2020

Я делаю программу спектрограммы, которая отображает спектрограмму в виде изображения на холсте. В настоящее время у меня есть ось, а также другие линии, связанные с itemControl с помощью привязки. Я хочу иметь возможность добавлять текстовые блоки на холст, чтобы можно было добавлять значения к выемкам оси.

                    <ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" Name="spectrogramScrollViewer" Loaded="SpectrogramScrollViewer_Loaded" >
                        <ItemsControl x:Name="SpecItem" ItemsSource="{Binding Path=Lines}">
                            <ItemsControl.ItemsPanel >
                                <ItemsPanelTemplate x:Name="spectrogramTemplate">
                                    <Canvas Loaded="SpectrogramCanvas_Loaded" MouseUp="Spectrogram_MouseUp" MouseDown="Spectrogram_MouseDown" x:Name="SpectrogramCanvas" HorizontalAlignment="Left" Grid.Row="0" Height="{Binding ImageHeight, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" Width="{Binding ImageWidth, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                            >
                                        <i:Interaction.Behaviors>
                                            <mouseMoveMvvm:MouseBehaviour MouseX="{Binding PanelX, Mode=OneWayToSource}" MouseY="{Binding PanelY, Mode=OneWayToSource}" />
                                        </i:Interaction.Behaviors>

                                        <Canvas.LayoutTransform>
                                            <ScaleTransform ScaleX="{Binding ScaleTransformX}" ScaleY="{Binding ScaleTransformY}"/>
                                        </Canvas.LayoutTransform>

                                        <Canvas.Background>
                                            <ImageBrush ImageSource="{Binding SpectrogramImage, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" />
                                        </Canvas.Background>
                                    </Canvas>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>

                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Rectangle Width="{Binding Width}" Height="{Binding Height}" Stroke="Gray" StrokeThickness="{Binding StrokeThickness}">

                                        <Rectangle.RenderTransform>
                                            <TranslateTransform X="{Binding CanvasLeft}" Y="{Binding CanvasTop}"/>
                                        </Rectangle.RenderTransform>

                                    </Rectangle>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </ScrollViewer>



1 Ответ

0 голосов
/ 02 марта 2020

Я нашел решение своей проблемы. Что мне нужно было сделать, так это составную коллекцию в Window.Resources. Это означало, что две коллекции объектов были объединены в код Xaml и связаны как таковые. Мне просто нужно было ссылаться на CombinedCollection в itemsSource моего itemscontrol, а мой шаблон данных обрабатывал остальное.

<Window.Resources>
        <CollectionViewSource x:Key="ViewSource1" Source="{Binding TextValues}"></CollectionViewSource>
        <CollectionViewSource x:Key="ViewSource2" Source="{Binding Lines}"></CollectionViewSource>

        <CompositeCollection x:Key="CombinedCollection">
            <CollectionContainer Collection="{Binding Source={StaticResource ViewSource1}}"></CollectionContainer>
            <CollectionContainer Collection="{Binding Source={StaticResource ViewSource2}}"></CollectionContainer>
        </CompositeCollection>

</Window.Resources>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...