【问题标题】:C# wpf control in viewbox but cannot get real size视图框中的 C# wpf 控件但无法获得实际大小
【发布时间】:2013-06-06 10:26:42
【问题描述】:

我在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>

而动态添加控制代码为:

 VideoChannel vc = new VideoChannel();
 this.grid1.Children.Add(vc);

还有这样的 VideoChannel 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>

只是一个有一些按钮的tabControl,所以点击一个按钮,它会在tabControl中动态添加一些东西:

VideoType1 vt1 = new VideoType1();
this.grid1.Children.Add(vt1);

最后,我想知道它的大小的最终控件是:

<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的图片,当我使用原始大小时,毕竟是可以的。但是,如果我改变窗口,border1的大小并没有改变,它仍然是原始大小,即使我看看是大还是小。

我尝试使用 PointToWindow 没问题:

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

它工作正常,(顶部和左侧的边框点会改变) 但我不确定用户是否会改变窗口的高度或宽度(所以我不能使用点的比例方法)。

我在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的实际大小(当窗口更改时)。

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

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

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

任何答案表示赞赏。

【问题讨论】:

    标签: c# wpf viewbox


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复,但它对我不起作用:(或者我使用错误的方法来检测尺寸?我使用int hsi = (int)border1.Height;MessageBox.Show("" + hsi);但hsi总是385(原始高度)
    • 这里有一篇文章如何使用 wpf 视图框。 miteshsureja.blogspot.de/2011/11/viewbox-in-wpf.html
    • 我认为这不是我的问题的主要问题...我想知道视图框中控件的实际大小,请多提一下,谢谢。
    【解决方案2】:

    好的,我知道你的意思。

    我有另一个解决方案,不过这是一个技巧。

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

    Viewbox 可以拉伸控件,但控件的实际大小不会改变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多