Silverlight 3/C#을 사용하고 있으며 버튼을 클릭 한 사용자의 응답으로 프로그래밍 방식으로 일부 XAML 개체를 만들려고합니다.Silverlight에서 프로그래밍 방식으로 캔버스를 배치하려면 어떻게합니까?
그러나, 내가 작성한 Canvas
오브젝트를 배치 할 수없는 것 - 나는 Canvas.LeftProperty
값으로 새로운 Canvas
에 SetValue()
를 호출 할 때, 브라우저 창은 빈 화면으로 지워집니다.
private Canvas MakeNewCanvas()
{
Canvas newCanvas = new Canvas();
newCanvas.Width = newCanvas.Height = 50;
newCanvas.SetValue(Canvas.LeftProperty, 10);
return newCanvas;
}
을이 호출하는 간단한 버튼 클릭 핸들러 :
private void MyButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
myPage.Children.Add(MakeNewCanvas());
}
NB을 내가 문제를 전시하고 간단한 기능을 가지고
는 (좀 더 복잡한 뭔가 시작) : myPage는 내 응용 프로그램의 MainPage XAML 파일에 정의 된 Canvas 객체입니다.
Firefox에서 실행중인 SL 응용 프로그램과 함께 VS 디버거에서이 추적을 수행했으며 브라우저가 실행되면 항상 브라우저가 흰색으로 바뀌고 상태 표시 줄에 따라 데이터 다운로드를 시작합니다. - 즉시 SetValue()
호출이 충돌 될 때, 브라우저가 흰색 간다
myPage.Children.Add(newCanvas);
newCanvas.SetValue(Canvas.LeftProperty, 10);
하지만이 차이가 없습니다 : 나는 같은과 XAML 트리에서 Canvas
을 넣어 한 후에 나는 SetValue()
를 호출했습니다.
Canvas
클래스는 종속성 속성 열거 형 값이있는 SetValue()
함수를 제외하고 Left/Top 자체를 설정하는 직접적인 방법이없는 것 같습니다. Canvas.SetLeft()
과 Canvas.SetTop()
도 있지만 그들은 단지 SetValue()
에 shim 일뿐입니다. 어쨌든 그들을 사용하지 않았다.
SetValue()
을 호출하지 않으면 맨 위 왼쪽에 예상대로 SL 응용 프로그램에 내 캔버스가 나타납니다 (그리고 내가 추가 한 하위 개체). 내가 기대하는 것처럼 그것이 내가 C#으로 노력하고있어 나에게 보인다 있도록 익스프레션 블렌드에서
내가 만드는 경우와 위치가 Canvas
개체, 다음 XAML 생성,의 Canvas
자체에 Canvas.Left
및 Canvas.Top
속성 값을 포함해야 작업.
하지만 브라우저에서 SL이 없으면 C#에서 왼쪽/맨 위 값을 설정할 수없는 것처럼 보입니다.
아이디어가 있으십니까?
편집 : 내 접근 방식은 정확하지만 캔버스 좌표는 정수가 아닌 부동 소수점이어야합니다. 자세한 내용은 승인 된 답변을 참조하십시오.
+1 좋은 잡기, 잘 목격 된 – AnthonyWJones