Связывание холста в HeaderedItemsControl: прямоугольник не отображается в абсолютной позиции - PullRequest
0 голосов
/ 28 февраля 2012

Я связываю холст с ObservableCollection. Мне нужен заголовок с TextBlock с заголовком и прямоугольниками по всему холсту в разных местах. Когда пользователь нажимает на Canvas, в позиции указателя мыши добавляется новый прямоугольник.

Поскольку мне были нужны заголовок и элементы, я использовал HeaderedItemsControl. Заголовок отображается нормально. Прямоугольник добавлен на холст, но его левый и верхний не установлены в заданном месте привязки. Вместо этого он складывает прямоугольники с вертикальной ориентацией, что, как я полагаю, является поведением по умолчанию HeaderedItemsControl.

XAML -

<HeaderedItemsControl Grid.Column="1" ItemsSource="{Binding Units}">
    <HeaderedItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Canvas.Left="{Binding Position.X}" Canvas.Top="{Binding Position.Y}" 
                                                                        Width="100" Height="70"/>
        </DataTemplate>
    </HeaderedItemsControl.ItemTemplate>
    <HeaderedItemsControl.Header>
        <TextBlock Text="{Binding Title}" />
    </HeaderedItemsControl.Header>
    <HeaderedItemsControl.Template>
        <ControlTemplate TargetType="{x:Type HeaderedItemsControl}">
            <Canvas Background="Transparent" MouseLeftButtonDown="CanvasMouseDown" Cursor="IBeam" >
                <ContentPresenter Content="{TemplateBinding Header}" />
                <ItemsPresenter >

                </ItemsPresenter>
            </Canvas>
        </ControlTemplate>
    </HeaderedItemsControl.Template>
</HeaderedItemsControl>

C # Код позади -

private void CanvasMouseDown(object sender, MouseButtonEventArgs e)
{
    Point position  = Mouse.GetPosition(e.Source as Canvas);
    MVVM.MainView.Units.Add(
        new MVVM.UnitViewModel(
            new MVVM.UnitModel(), position.X, position.Y));
}

Просмотр модели -

public class UnitViewModel : WorkspaceViewModel
{
    private UnitModel _unitModel;
    private System.Windows.Point _point;

    internal UnitViewModel(UnitModel unitModel, double x, double y)
    {
        this._unitModel = unitModel;
        _point.X = x;
        _point.Y = y;
    }

    public System.Windows.Point Position
    {
        get { return _point; }
    }
}

Как вы думаете, в чем проблема?

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