我有一个wpf应用程序,其中有一个网格,并且有一个按钮。每次用鼠标按下按钮,它都会转到另一个随机位置。调整大小很有效,直到按钮位于右下方,调整大小后才会消失
<Grid x:Name="MainGrid" MinWidth="60" MinHeight="60" Margin="0">
<Button x:Name="btn" Content="Button" Click="Button_Click" MouseEnter="MouseEnter_btn" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,67,149"/>
</Grid>
private void MouseEnter_btn(object sender, MouseEventArgs e)
{
Random rng = new Random();
double x = (MainGrid.ActualWidth - btn.ActualWidth) - rng.Next(1, (int)(MainGrid.ActualWidth - btn.ActualWidth));
double y = (MainGrid.ActualHeight - btn.ActualHeight) - rng.Next(1, (int)(MainGrid.ActualHeight - btn.ActualHeight));
btn.Margin = new Thickness(x, y, 1, 1);
}
答案 0 :(得分:0)
这是一个解决方案,应该可以满足您的需求:
<Grid x:Name="MainGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="100" x:Name="XOffset"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="100" x:Name="YOffset"/>
</Grid.RowDefinitions>
<Button x:Name="btn" Content="Button"
MouseEnter="MouseEnter_btn"
Grid.Row="1"
Grid.Column="1"/>
</Grid>
在代码中只需更改XOffset和YOffset
private void MouseEnter_btn(object sender, MouseEventArgs e)
{
Random rng = new Random();
Size availableSize = new Size(MainGrid.ActualWidth - btn.ActualWidth, MainGrid.ActualHeight - btn.ActualHeight);
int x = rng.Next(1,(int)availableSize.Width);
int y = rng.Next(1, (int)availableSize.Height);
XOffset.Width = new GridLength(x);
YOffset.Height = new GridLength(y);
}
现在按钮被XOffset和YOffset锁定在右下方,如果它到达左边或上边缘,它将保持在那里,右/底偏移将减少。