Как да поставите списък с пътища в рамка в WPF

пиша C# WPF програма за преглед и редактиране на SVG. Така че имам списък с пътеки (PathList) и ги възпроизвеждам вътре в граница на платно, ето моят XAML:

            <ItemsControl ItemsSource="{Binding PathList}" >
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>                          
                        <Canvas>
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="MouseDown" >
                                    <cmd:EventToCommand Command="{Binding Path= OnMouseDownCommand}" PassEventArgsToCommand="True" />
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                        </Canvas>

                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>

                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Viewbox Stretch="Uniform"  Height="500" Width="500">
                        <Path Stroke="{Binding Stroke}" 
                              StrokeThickness="{Binding StrokeThickness}" 
                              Fill="{Binding Fill}" 
                              Data="{Binding Data}" 
                              Tag="{Binding Tag}"
                        </Viewbox>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

както казах в заглавието, целта ми е да побера тези пътеки в рамка и както можете да видите в моя код, използвах Viewbox за разтягане на пътеките, но проблемът е, че тя разтяга всяка пътека в списъка, за да запълни размера (500 *500) изкривяване на формата на векторната графика.. искам мащабирането да се случи с целия списък наведнъж като цяло, оставяйки относителния мащаб и местоположенията на тези пътища непокътнати.


person Mohab Mesherf    schedule 23.03.2015    source източник
comment
Опитахте ли да поставите целия ItemsControl в Viewbox, вместо отделните елементи?   -  person Clemens    schedule 23.03.2015
comment
@Clemens да, когато правя това, svg не се показва   -  person Mohab Mesherf    schedule 23.03.2015
comment
Също така трябва да зададете ширината и височината на ItemsControl (или ItemsPanel Canvas) на 500.   -  person Clemens    schedule 23.03.2015


Отговори (1)


Следващият опростен пример показва как да поставите списък с геометрични елементи в мащабируем ItemsControl. Необходимо е да зададете ширината и височината на ItemsControl.

<Viewbox>
    <ItemsControl Width="500" Height="500">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Path Stroke="Black" StrokeThickness="3" Data="{Binding}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.Items>
            <EllipseGeometry Center="150,150" RadiusX="100" RadiusY="100"/>
            <EllipseGeometry Center="350,350" RadiusX="100" RadiusY="100"/>
        </ItemsControl.Items>
    </ItemsControl>
</Viewbox>
person Clemens    schedule 23.03.2015
comment
добре, това определено работи, но някои неща трябва да бъдат променени, но това със сигурност свърши работа - person Mohab Mesherf; 23.03.2015