日期:2014-05-18  浏览次数:20701 次

Margin调整控件的位置
我想实现调整一个控件在其容器控件中的位置,我使用了margin进行调整,代码如下:
C# code

// xaml部分
<Window x:Class="MarginTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid x:Name="outsidegrid" Background="Black" MouseLeftButtonDown="outsidegrid_MouseLeftButtonDown" MouseRightButtonDown="outsidegrid_MouseRightButtonDown">
        <Grid x:Name="insidegrid" Background="LightBlue" Width="200" Height="200">
            <Grid x:Name="rectGrid" Background="Red" Width="50" Height="50" HorizontalAlignment="Left" VerticalAlignment="Top">
                
            </Grid>
        </Grid>
    </Grid>
</Window>


C# code

// C#代码部分
 /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void outsidegrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            rectGrid.Margin =
                new Thickness(-20, -20, 0, 0);
        }

        private void outsidegrid_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            rectGrid.Margin =
                new Thickness(180, 180, 0, 0);
        }
    }


用意就是想在左键按下的时候将rectGrid移动到insidegrid的左上角,按下右键的时候将rectGrid移动到insidegrid的右下角。
问题发生了:
当我按下左键的时候,rectGrid移动到了insidegrid的左上角,但是超出insidegrid的部分被显示出来了,也就是看到了rectGrid的一部分超出到insidegrid外边去了(并且超出的部分被显示出来了),而当我按下右键的时候,rectGrid被移动到了insidegrid的右下角,但这时,rectGrid超出insidegrid的部分却没有被显示,请问这是为什么呢?
如果我想在左上或者右下角,rectGrid超出其容器控件insidegrid的部分都被显示(或都被隐藏)应该如何操作呢?
多谢指点!

------解决方案--------------------
加了margin 你需要把控件宽度变窄。。。。
HTML的占位是width+padding+border+margin

看看HTML教程吧,别做拖控件的