Как сделать так, чтобы itemtemplate знал о содержащем его шаблоне? - PullRequest
1 голос
/ 12 октября 2011

Я хочу, чтобы этот эллипс получил свои координаты из соответствующей модели BallViewModel и использовал их для определения своего местоположения внутри холста.Список шаров привязан к List<BallVM> в модели mainview, и поэтому я выбрал itemsControl, у которого есть панель canvas.

Является ли этот подход правильным?

Если я попытаюсь связать X и Y внутри стиля предметного контейнера, то это не относится к определенному шару.

Независимо от того, что я установилв свойствах Canvas.bottom или canvas.left эллипс всегда вверху слева.

<Grid>
        <ItemsControl ItemsSource="{Binding Balls}" Background="red">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas MouseMove="Canvas_MouseMove" Background="Blue"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

            <ItemsControl.ItemTemplate>
                <DataTemplate DataType="{x:Type VM:BallVM}">
                    <Ellipse Canvas.Bottom="{Binding Y}" Canvas.Left="{Binding X}" Width="100" Height="100" Fill="Red"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>

1 Ответ

1 голос
/ 12 октября 2011

Когда вы используете ItemTemplate с ItemControls, он напрямую не помещает ваши Elippses на холст, а помещает их в ContentPresenter. Поэтому вы должны применить свои свойства canvas.Bottom / Left для ItemsPresenter. Вы можете сделать это с ItemContainerStyle:

<ItemsControl.ItemContainerStyle>
            <Style>
                <Setter Property="Canvas.Bottom" Value="{Binding Y}" />
                <Setter Property="Canvas.Left" Value="{Binding X}" />                    
            </Style>
 </ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
            <DataTemplate DataType="{x:Type VM:BallVM}">
                <Ellipse Width="100" Height="100" Fill="Red"/>
            </DataTemplate>
 </ItemsControl.ItemTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...