Устанавливает холст свойства в ItemContainerStyle классе ItemsControl это 'осветление'?


У меня есть проект, в котором я поменял местами ItemsPanelTemplate от использования StackPanel таким образом

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel IsItemsHost="True" Orientation="Horizontal"/>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

К использованию Canvas таким образом

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <Canvas IsItemsHost="True" Width="Auto" Height="Auto"/>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

Я делаю это так, чтобы я мог разложить элементы по времени их начала на временной шкале, а не складывать друг против друга. Но потом я застрял, как установить свойство Canvas.Left для каждого элемента в ItemsControl. Очевидное место (я думал) было в Grid, которое я использую в ItemTemplate S DataTemplate, т. е. где-то здесь:

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <Grid HorizontalAlignment="Left" VerticalAlignment="Center" Height="10">
            <eventBlockVisualization:FGEventUC/>
        </Grid>
    </DataTemplate>
</ItemsControl.ItemTemplate>

Но эта часть XAML не имеет ссылки на хостинг Canvas. К счастью, есть очень похожий вопрос, в котором atsjoo задает "задание свойств Canvas в ItemsControl DataTemplate " и Arcturus отвечает, объясняя роль и использование ItemContainerStyle (и LiamV дает аналогичный ответ здесь ), что в моем случае приводит к

<ItemsControl.ItemContainerStyle>
    <Style TargetType="ContentPresenter">
        <Setter Property="Canvas.Left" Value="{Binding MinutesFromStartOfLogs}"/>
    </Style>
</ItemsControl.ItemContainerStyle>

Это все прекрасно редактирование XAML вручную, но в идеале я хотел бы управлять этими стилями и привязками в Expression Blend 4 или Blend для Visual Studio 2012. Если я выберу ItemsControl в панели Blend 'объекты и временная шкала', а затем перейду в меню ' объекты - > редактировать дополнительные стили - > редактировать созданный контейнер элементов (ItemContainerStyle)', я смогу редактировать ItemContainerStyle, но я не вижу, где Blend предоставляет свойство Canvas.Left, установленное в моем XAML. Где же он? Можно ли это "смягчить"?

1 2

1 ответ:

Насколько я знаю, это невозможно. присоединенные свойства не отображаются в Blend, потому что их слишком много. Когда элемент помещается непосредственно в холст, отображаются левые и верхние свойства, но невозможно иметь все присоединенные свойства доступными. Например, вы можете установить холст.Левое свойство, если элемент, на который вы устанавливаете свойство, не находится внутри холста.

Единственный способ задать вложенное свойство-это сделать это вручную в Xaml.