[英]How to force a control to stay within the window in wpf?
我有一個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);
}
這是一個解決方案,幾乎可以滿足您的需求:
<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鎖定在右下角,如果到達左邊緣或上邊緣,它將停留在那里,並且將減小右/底偏移量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.