我为我的英语语法弱点道歉。我尝试在WPF网格中绘制一个矩形。我绘制它,但在网格的右侧和底部看不到这个矩形。我该怎么办?这是我的XAML和代码。
< Window x:Class =“DrawCircle.MainWindow”
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
MouseLeftButtonUp="window_MousLefteUp" MouseRightButtonUp="window_MouseRightButtonUp"
MouseMove="Grid_MouseMove"
MouseDown="Grid_MouseDown" >
<Grid x:Name="window" Margin="0,0,0,0" Background="PaleGreen" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ClipToBounds="False">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="scaleTransform1" ScaleX="0.5" ScaleY="0.5" />
<TranslateTransform x:Name="translateTransform1" X="0" Y="0" />
</TransformGroup>
</Grid.RenderTransform>
</Grid>
它背后的代码是:
public partial class MainWindow : Window
{
bool cornerPointed = false;
Point corner1;
Rectangle myRectangle;
public MainWindow()
{
InitializeComponent();
myRectangle = new Rectangle();
myRectangle.HorizontalAlignment = HorizontalAlignment.Left;
myRectangle.VerticalAlignment = VerticalAlignment.Top;
myRectangle.Stroke = Brushes.Red;
window.Children.Add(myRectangle);
}
private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
cornerPointed = true;
corner1 = new Point(e.GetPosition(this.window).X, e.GetPosition(this.window).Y);
myRectangle.Margin = new Thickness(corner1.X, corner1.Y, 0, 0);
}
private void Grid_MouseMove(object sender, MouseEventArgs e)
{
if (cornerPointed == true)
{
Point corner2 = e.GetPosition(this.window);
myRectangle.Margin = new Thickness(System.Math.Min(corner1.X, corner2.X),
System.Math.Min(corner1.Y, corner2.Y),
0, 0);
myRectangle.Width = Math.Abs(e.GetPosition(this.window).X - corner1.X);
myRectangle.Height = Math.Abs(e.GetPosition(this.window).Y - corner1.Y);
}
}
private void window_MousLefteUp(object sender, MouseButtonEventArgs e)
{
cornerPointed = false;
myRectangle = new Rectangle();
myRectangle.HorizontalAlignment = HorizontalAlignment.Left;
myRectangle.VerticalAlignment = VerticalAlignment.Top;
myRectangle.Stroke = Brushes.Red;
window.Children.Add(myRectangle);
}
}
答案 0 :(得分:0)
你问为什么绿色网格没有填满整个窗口?如果是这样,那是因为这条线将网格的宽度和高度缩小了50%:
<ScaleTransform x:Name="scaleTransform1" ScaleX="0.5" ScaleY="0.5" />
如果不是问题,请澄清问题所在。
答案 1 :(得分:0)
缩放变换正在缩小绿色网格。由于您直接在绿色网格上绘制红色矩形,因此红色矩形不能超出绿色。
如果您希望绿色是那么小但仍然有红色到处,那么你可以使用这样的另一个网格:
<Grid x:Name="window">
<Grid Background="PaleGreen">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="scaleTransform1" ScaleX="0.5" ScaleY="0.5" />
<TranslateTransform x:Name="translateTransform1" X="0" Y="0" />
</TransformGroup>
</Grid.RenderTransform>
</Grid>
</Grid>
编辑: 这是使用滑块演示“缩放”效果的另一个示例。移动滑块时,红色矩形也会缩放。
<DockPanel LastChildFill="True">
<Slider x:Name="sldZoom" DockPanel.Dock="Top" Orientation="Horizontal" Minimum="0" Maximum="1" Value="1"/>
<Grid Background="PaleGreen" x:Name="window">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="scaleTransform1"
ScaleX="{Binding ElementName=sldZoom, Path=Value, Mode=OneWay}"
ScaleY="{Binding ElementName=sldZoom, Path=Value, Mode=OneWay}" />
</TransformGroup>
</Grid.RenderTransform>
</Grid>
</DockPanel>
EDIT2: 如果您愿意,还可以更改滑块的比例(或您使用的任何绑定属性)。例如..而不是使用0-1比例,你可以使用0-10比例。这意味着,当您将其设置为10时,您将获得10倍缩放效果。
如果要禁用缩小到您无法写入的空白点,请将基本比例设置为1.这是一个滑块,您可以放入上面的示例中,它将为您提供1-10x规模。这将禁止用户缩小到他们获得不可写区域的位置。 (您可以使用数字来获得您认为合适的任何设置。)
<Slider x:Name="sldZoom" DockPanel.Dock="Top" Orientation="Horizontal" Minimum="1" Maximum="10" Value="2"/>