【发布时间】:2013-11-08 01:38:00
【问题描述】:
我正在地图上绘制单元格墙,但它的大小错误。我在调试器中检查了图像的高度,它与正确的 cellSize 大小相同,但在视觉上它看起来更短,并且它的开头没有绘制在正确的位置。就像它被画在两端的顶部一样。当我更改图像的高度属性时,它不会使图像变大。这不是如何设置图像大小的高度和宽度吗?
这里是代码。
private void calculateWall(int wall, int cell)
{
int[] mapData = this.getMapData(cell);
int startOfCol = mapData[0];
int endOfCol = mapData[1];
int startOfRow = mapData[2];
int endOfRow = mapData[3];
CellSide rightSide = this.getCells()[cell].myRightWall;
CellSide bottomSide = this.getCells()[cell].myBottomWall;
float thickness = myMap.myCellSize * (float)0.1;
Math.Round(thickness, 0);
int newThickness = Convert.ToInt32(thickness);
float height = myMap.myCellSize * (float)0.2;
Math.Round(height, 0);
int newHeight = Convert.ToInt32(height);
if (rightSide.hasWall == 1)
{
Image verticalWall = new Image();
// Create source.
BitmapImage bi = new BitmapImage();
// BitmapImage.UriSource must be in a BeginInit/EndInit block.
bi.BeginInit();
bi.UriSource = new Uri("verticalWall.jpg", UriKind.RelativeOrAbsolute);
bi.EndInit();
// Set the image source.
verticalWall.Source = bi;
verticalWall.Width = newThickness;
verticalWall.Height = myMap.myCellSize;
verticalWall.SetValue(Canvas.TopProperty, Convert.ToDouble(startOfRow));
verticalWall.SetValue(Canvas.LeftProperty, Convert.ToDouble(endOfCol - (newThickness / 2)));
verticalWall.IsHitTestVisible = false;
this.view.pbxMap.Children.Add(verticalWall);
}
【问题讨论】:
-
不要在 WPF 的过程代码中创建或操作 UI 元素。这就是 XAML 的用途。创建一个合适的 ViewModel 并为此使用
ItemsControl。 -
@HighCore 我在鼠标点击时动态添加和删除墙。在我的 winforms 版本中,这种技术没有问题。
-
WinForms 不是 WPF,无论如何,我实际上对您正在做的事情很感兴趣(例如,希望看到最终结果 :)
-
@Noctis 是的,但我也一直在 WPF 中以编程方式绘制墙壁以及其他图像,以这种方式,它已经工作了,所以我更愿意这样做,但是奇怪的是这次它怎么不工作了。太好了,如果你喜欢,我可以在完成后给你 github url :)
-
@user2602079 这样做:)。抱歉,我无法提供更多帮助。话虽如此,使用 XAML 和绑定来处理点击有什么问题?有时在 XAML 中而不是在代码中做事情更容易和更短......