Как разместить прямоугольник во встроенном Silverlight? - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь расположить прямоугольник на холсте, но не могу понять, каков правильный синтаксис для этого. В C # я бы написал

rect = new Rectangle();
        rect.Width = 100D;
        rect.Height = 50D;
        rect.Fill = new SolidColorBrush(Colors.Red);
        rect.StrokeThickness = 2;
        rect.Stroke = new SolidColorBrush(Colors.Black);

        Canvas.SetLeft(rect,5);
        Canvas.SetTop(rect,5);
        DrawCanvas.Children.Add(rect);

Я пытаюсь сделать то же самое со встроенным кодом, но у меня проблемы с позиционированием прямоугольника. Какой правильный способ создания и позиционирования фигуры на холсте программно во встроенном Silverlight? Это то, что у меня есть, но при запуске ничего не отображается на холсте.

HRESULT MainPage::BtnOk_Click (IXRDependencyObject* pSender, XRMouseButtonEventArgs* ?  pArgs)
{
HRESULT hr = E_NOTIMPL;

if ((NULL == pSender) || (NULL == pArgs))
{
    hr = E_INVALIDARG;
}

IXRApplicationPtr pApplication;
if (FAILED(hr = App::GetApplication(&pApplication)))
    return hr;

IXRVisualHostPtr pVisualHost;
if (FAILED(hr = App::GetVisualHost(&pVisualHost)))
    return hr;

//Create Brush
IXRSolidColorBrushPtr pPaintBrushRed;
IXRSolidColorBrushPtr pPaintBrushBlack;

COLORREF brushColorRed = RGB(255,0,0);
COLORREF brushColorBlack = RGB(0,0,0);

pApplication->CreateObject(&pPaintBrushRed);
pPaintBrushRed->SetColor(brushColorRed);

pApplication->CreateObject(&pPaintBrushBlack);
pPaintBrushBlack->SetColor(brushColorBlack);


IXRRectanglePtr pRectangle;
IXRFrameworkElementPtr pRootElement;
IXRCanvasPtr pCanvasPanel;
IXRUIElementCollectionPtr pChildrenCollection;

pApplication->CreateObject(IID_IXRRectangle, &pRectangle);  
pRectangle->SetWidth(100);
pRectangle->SetHeight(50);
pRectangle->SetFill(pPaintBrushRed);
pRectangle->SetStroke(pPaintBrushBlack);
pRectangle->SetStrokeThickness(2);
pRectangle->SetName(TEXT("MyRect"));


pVisualHost->GetRootElement(&pRootElement); 
pRootElement->FindName(TEXT("DrawCanvas"), &pCanvasPanel);

pCanvasPanel->GetChildren(&pChildrenCollection);
pChildrenCollection->Add(pRectangle, NULL);
pCanvasPanel->SetAttachedProperty(L"MyRect.Left",NULL,5);
pCanvasPanel->SetAttachedProperty(L"MyRect.Top",NULL,5);



/*rect = new Rectangle();
        rect.Width = 100D;
        rect.Height = 50D;
        rect.Fill = new SolidColorBrush(Colors.Red);
        rect.StrokeThickness = 2;
        rect.Stroke = new SolidColorBrush(Colors.Black);

        Canvas.SetLeft(rect,5);
        Canvas.SetTop(rect,5);
        DrawCanvas.Children.Add(rect);*/
return hr;
}

Код XAML:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ChartApplication"
x:Class="ChartApplication.MainPage"
Width="640" Height="480">

<Grid x:Name="LayoutRoot" Background="White">
    <local:ChartControl Margin="97,58,82,89"/>
    <Rectangle Fill="#FFE25E5E" Stroke="Black" Height="133" Margin="97,98,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="217"/>
    <Ellipse Fill="#FFB7E25E" Stroke="Black" Height="105" HorizontalAlignment="Right" Margin="0,0,41,78" VerticalAlignment="Bottom" Width="235"/>
    <Button x:Name="BtnOk" Height="85" HorizontalAlignment="Left" Margin="113,0,0,89" VerticalAlignment="Bottom" Width="155" Content="Ok" Click="BtnOk_Click"/>
    <Canvas x:Name="DrawCanvas" HorizontalAlignment="Right" Margin="0,98,41,198" Width="240" Background="#FFE4E4F2"/>

</Grid>

1 Ответ

0 голосов
/ 03 июля 2012

Canvas может не поддерживать встроенный Silverlight. Вы можете добавить непосредственно в Grid

IXRUIElementCollectionPtr pElementCollection;
m_pLayoutRoot->GetChildren(&pElementCollection);
int nIndex=0;
pChildrenCollection->Add(pRectangle, &nIndex);
nIndex++;
...