viewbox中的C#wpf控件,但无法获取实际大小

viewbox中的C#wpf控件,但无法获取实际大小,c#,wpf,viewbox,C#,Wpf,Viewbox,我在wpf的窗口中使用viewbox,该控件是以编程方式添加的。我希望当窗口大小改变时,窗口中的控件可以灵活。但是,控件的外观似乎发生了更改,宽度和高度没有更改,即使我对控件使用sizeChanged事件,当我看到控件的大小发生更改时,它也没有被触发 以下是我在主窗口中的示例xaml: <Grid> <Viewbox Name="viewbox1"> <Grid Height="667" HorizontalAlign

我在wpf的窗口中使用viewbox,该控件是以编程方式添加的。我希望当窗口大小改变时,窗口中的控件可以灵活。但是,控件的外观似乎发生了更改,宽度和高度没有更改,即使我对控件使用sizeChanged事件,当我看到控件的大小发生更改时,它也没有被触发

以下是我在主窗口中的示例xaml:

    <Grid>
        <Viewbox Name="viewbox1">
            <Grid Height="667" HorizontalAlignment="Left" Margin="241,31,0,0" Name="grid1" VerticalAlignment="Top" Width="745" Background="White" /> 
            </Grid>
        </Viewbox>
    </Grid>
视频频道xaml是这样的:

<TabControl Height="613" HorizontalAlignment="Left" Margin="0,12,0,0" Name="tabControl1" VerticalAlignment="Top" Width="638" Background="{x:Null}" SelectionChanged="tabControl1_SelectionChanged">
            <TabItem Header="-P1-" Name="tabItem1" Height="30" FontFamily="Meiryo" FontWeight="Bold" BorderBrush="#FFA0A0A0" Background="#FFB7DEE8">
                <Grid Height="566">
                    <Button BorderBrush="{x:Null}" ClickMode="Press" Height="36" Margin="48,11,0,0" Name="btnVideo1" VerticalAlignment="Top" HorizontalAlignment="Left" Width="36" Click="btnVideo1_Click">
                    </Button>
                </Grid>
            </TabItem>
        </TabControl>
最后,我想知道它的大小的最终控件是:

<Border Background="DimGray" MinHeight="144" MinWidth="176" Name="border1" Grid.Column="1" Margin="0,63,0,0" Height="385" VerticalAlignment="Top" HorizontalAlignment="Left" Width="527" />
它工作正常,(顶部和左侧的边界点将发生变化) 但我不确定用户是否只会更改窗口的高度或宽度(所以我不能使用点的缩放方法)

我在border1中添加了sizeChanged事件,但它没有被触发(我不知道原因)

捕获代码为:

            Point video = border1.PointToScreen(new Point(0, 0));

            int w = (int)video.X + (int)border1.Width;

            int h = (int)video.Y + (int)border1.Height;

            int hsi = (int)border1.Height;

            if (canCap == true)
            {
                int wid = (int)border1.Margin.Right - (int)video.X;
                int hei = (int)border1.Margin.Bottom - (int)video.Y;
                System.Drawing.Bitmap b = new System.Drawing.Bitmap((int)border1.Width,(int)border1.Height);
                using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(b))
                {
                    g.CopyFromScreen((int)video.X, (int)video.Y, (int)border1.Margin.Right, (int)border1.Margin.Bottom, b.Size, System.Drawing.CopyPixelOperation.SourceCopy);
                }

                Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
                dlg.DefaultExt = ".png";
                dlg.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png";

                Nullable<bool> result = dlg.ShowDialog();

                if (result == true)
                {
                    string filename = dlg.FileName;
                    b.Save(filename);
                }
            }
            else
                return;
点视频=边框1.点到屏幕(新点(0,0));
intw=(int)video.X+(int)border1.Width;
inth=(int)video.Y+(int)border1.Height;
int hsi=(int)边界1.5米高度;
如果(canCap==true)
{
intwid=(int)border1.Margin.Right-(int)video.X;
inthei=(int)border1.Margin.Bottom-(int)video.Y;
System.Drawing.Bitmap b=新的System.Drawing.Bitmap((int)border1.宽度,(int)border1.高度);
使用(System.Drawing.Graphics g=System.Drawing.Graphics.FromImage(b))
{
g、 CopyFromScreen((int)video.X,(int)video.Y,(int)border1.Margin.Right,(int)border1.Margin.Bottom,b.大小,系统.绘图.CopyPixelOperation.SourceCopy);
}
Microsoft.Win32.SaveFileDialog dlg=新建Microsoft.Win32.SaveFileDialog();
dlg.DefaultExt=“.png”;
dlg.Filter=“JPeg Image |*.jpg |位图Image |*.bmp | Gif Image |*.Gif | PNG Image |*.PNG”;
可为空的结果=dlg.ShowDialog();
如果(结果==真)
{
字符串文件名=dlg.filename;
b、 保存(文件名);
}
}
其他的
返回;
我试图得到边框1的真实大小(当窗口改变时)

在捕获代码中,大小(border1.Width和border1.Height)始终是原始大小(527x385)

抱歉解释得不好,问题的核心是:

使用viewbox拉伸控件,但在调整窗口大小时更改控件大小时,控件大小不会更改(viewbox的区域是整个窗口)


任何答复都将不胜感激

使用Viewbox的拉伸属性设置适当的拉伸模式。

好的,我知道你的意思

我有另一个解决办法,不过这是个骗局

我使用主窗口的sizeChanged事件,并在大小更改时存储大小。 然后,在控件边框1中,我使用scale更改捕获范围


Viewbox可以拉伸控件,但是控件的实际大小没有改变。

谢谢您的回复,但它对我来说不起作用:(或者我使用了错误的方法来检测大小吗?我使用
int hsi=(int)border1.Height;
MessageBox.Show(“+hsi”);
但是hsi总是385(原始高度)这里有一篇关于如何使用wpf viewbox的文章。我认为这不是我的主要问题…我想知道viewbox中控件的实际大小,请提供更多信息,谢谢。
<Border Background="DimGray" MinHeight="144" MinWidth="176" Name="border1" Grid.Column="1" Margin="0,63,0,0" Height="385" VerticalAlignment="Top" HorizontalAlignment="Left" Width="527" />
Point video = border1.PointToScreen(new Point(0, 0));
            Point video = border1.PointToScreen(new Point(0, 0));

            int w = (int)video.X + (int)border1.Width;

            int h = (int)video.Y + (int)border1.Height;

            int hsi = (int)border1.Height;

            if (canCap == true)
            {
                int wid = (int)border1.Margin.Right - (int)video.X;
                int hei = (int)border1.Margin.Bottom - (int)video.Y;
                System.Drawing.Bitmap b = new System.Drawing.Bitmap((int)border1.Width,(int)border1.Height);
                using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(b))
                {
                    g.CopyFromScreen((int)video.X, (int)video.Y, (int)border1.Margin.Right, (int)border1.Margin.Bottom, b.Size, System.Drawing.CopyPixelOperation.SourceCopy);
                }

                Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
                dlg.DefaultExt = ".png";
                dlg.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PNG Image|*.png";

                Nullable<bool> result = dlg.ShowDialog();

                if (result == true)
                {
                    string filename = dlg.FileName;
                    b.Save(filename);
                }
            }
            else
                return;