Привязка XAML с динамически созданными элементами управления - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть приложение silverlight, которое отображает позиции автомобилей на дороге.

Я использую шаблон MVVM, поэтому у меня есть коллекция MapPosition в моей модели представления.

Я такжеиспользуя внешний SDK (из ArcGIS), чтобы сделать мои рисунки, таким образом, ограничение состоит в том, что мне нужно нарисовать объект Symbol, который содержит TemplateControl, в который я могу поместить все, что захочу, конечно.не нашел способа привязать объект MapPosition (который в основном просто содержит координаты и некоторую дополнительную информацию) к шаблону, который мне очень не нужен, потому что у меня есть свойство, которое мне действительно нужно связать, чтобы изменить угол значка инапример, отобразить всплывающую подсказку.

Это единственный найденный способ заставить его работать, но он мне действительно не нравится:

        MarkerSymbol symbol = new MarkerSymbol();

        string xamlTemplate = String.Format(@"
            <ControlTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" >
                <Grid Width=""200"" Height=""200"">
                    <Grid.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform ScaleX=""0.1"" ScaleY=""0.1"" />
                            <RotateTransform Angle=""{0}"" CenterX=""10"" CenterY=""10"" />
                        </TransformGroup>
                    </Grid.RenderTransform>
                    <Canvas VerticalAlignment=""Top"" HorizontalAlignment=""Center"">
                        <ToolTipService.ToolTip>
                            <ToolTip Content=""{1}""></ToolTip>
                        </ToolTipService.ToolTip>
                        <Canvas.RenderTransform>
                            <TranslateTransform X=""-50""/>
                        </Canvas.RenderTransform>
                        <Path Data=""F1 M 49.75,0L 0,200L 50,158.5L 100,200L 49.75,0 Z"" Fill=""#FF008F00"" Stroke=""Black""></Path>
                    </Canvas>
                </Grid>
            </ControlTemplate>", value.Course, value.ToolTip);

        ControlTemplate template = new ControlTemplate();

        boatSymbol.ControlTemplate = (ControlTemplate)XamlReader.Load(xamlTemplate);

Затем я зацикливаюсь на каждом элементе моего спискаи создайте шаблон на лету.

Итак, вопрос в том, как правильно связать шаблон с каждым объектом моего сотрудничества.llection и иметь шаблон в xaml вместо того, чтобы в моем коде была уродливая строка?

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 05 сентября 2011

<BoatSymbol.ControlTemplate>
     <ControlTemplate> 
            <Grid Width="200" Height="200"> 
                <Grid.RenderTransform> 
                    <TransformGroup> 
                        <ScaleTransform ScaleX="0.1" ScaleY="0.1" /> 
                        <RotateTransform Angle="{Binding Angle}" CenterX="10" CenterY="10" /> 
                    </TransformGroup> 
                </Grid.RenderTransform> 
                <Canvas VerticalAlignment="Top" HorizontalAlignment="Center"> 
                    <ToolTipService.ToolTip>
                        <ToolTip Content="{Binding Course}"></ToolTip> 
                    </ToolTipService.ToolTip> 
                    <Canvas.RenderTransform> 
                        <TranslateTransform X="-50"/> 
                    </Canvas.RenderTransform> 
                    <Path Data="F1 M 49.75,0L 0,200L 50,158.5L 100,200L 49.75,0 Z" Fill="#FF008F00" Stroke="Black"></Path> 
                </Canvas> 
            </Grid> 
        </ControlTemplate>
</BoatSymbol.ControlTemplate>

Предполагается, что для DataContext из BoatSymbol установлена ​​соответствующая модель представления.

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