簡體   English   中英

如何在wpf中強制控件停留在窗口中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM