如何在Web浏览器控件上放置图像

时间:2012-05-24 16:20:59

标签: c# windows-phone-7

在Windows Phone 7的网络浏览器应用程序中,我在网格上创建了​​一个Web浏览器控件(在xaml.cs中)。之后我在网格上创建了​​一个图像。但是当我在模拟器中打开Web浏览器时,该图像不可见。这是一个标签式浏览器。 但是图像在网格中可见但在Web浏览器控件上不可见(调试应用程序后)。就像UC浏览器有这个东西。将以下图像放在网格上,图像可见,但在Web浏览器控件上,图像不可见。

enter image description here enter image description here
enter image description here

在.xaml

    <Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <TextBox x:Name="UrlTextBox" Background="White" InputScope="URL" KeyDown="UrlTextBox_KeyDown" Margin="0,0,98,0" GotFocus="UrlTextBox_GotFocus" LostFocus="UrlTextBox_LostFocus" KeyUp="UrlTextBox_KeyUp"/>
    <Grid x:Name="BrowserHost" 
      Grid.Row="1" GotFocus="BrowserHost_GotFocus">
        <Image x:Name="Full" Source="Images/full.png" Height="60" Width="60" Margin="430,678,0,0" MouseEnter="Full_MouseEnter" Visibility="Visible" />
    </Grid>

在Xaml.cs中

private void ShowTab(int index) 
{ 
    this.currentIndex = index;       
    UrlTextBox.Text = this.urls[this.currentIndex] ?? "Search"; 
    if (this.browsers[this.currentIndex] == null) 
    { 
        WebBrowser browser = new WebBrowser(); 
        this.browsers[this.currentIndex] = browser; 
        BrowserHost.Children.Add(browser); 
        browser.IsScriptEnabled = true; 
    } 
    for (int i = 0; i < NumTabs; i++) 
    { 
        if (this.browsers[i] != null) 
        { 
            this.browsers[i].Visibility = i == this.currentIndex ? Visibility.Visible : Visibility.Collapsed; 
        } 
    } 
} 

我需要在我的网络浏览器控件中使用该图像。有人能帮助我吗?

提前感谢您的辛勤工作!

2 个答案:

答案 0 :(得分:1)

在一个全新的应用程序中,在MainPage.xaml中我替换了

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"></Grid>

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <phone:WebBrowser x:Name="theBrowser" />
    <Image Source="/Background.png"
           Stretch="None"
           HorizontalAlignment="Left"
           VerticalAlignment="Bottom" />
</Grid>

然后在页面构造函数中我添加了

theBrowser.Navigate(new Uri("http://stackoverflow.com/"));

这导致显示如下:

look it works - Note: screenshot taken in light theme

这证明它非常合理。
不幸的是,您的问题(XAML)中的不完整样本和与您的实际问题无关的代码(.cs)使您很难确切地说为什么无法使其工作。

此外,请先阅读http://tinyurl.com/so-hints,然后再发帖,并以便于人们帮助您的方式提出未来问题。

答案 1 :(得分:0)

当您在代码中添加浏览器控件时,您将它放在图像的顶部。您需要Grid中的容器来保存控件。不过,最终,您应该尝试按照Matt Lacey所示的方式在XAML中设置它。

如果你想尝试这个你的方式,你需要这样的东西:

<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <TextBox x:Name="UrlTextBox" Background="White" InputScope="URL" KeyDown="UrlTextBox_KeyDown" Margin="0,0,98,0" GotFocus="UrlTextBox_GotFocus" LostFocus="UrlTextBox_LostFocus" KeyUp="UrlTextBox_KeyUp"/>
    <Grid x:Name="BrowserHost" 
  Grid.Row="1" GotFocus="BrowserHost_GotFocus">
        <Grid x:Name="BrowserHolder"/>
        <Image x:Name="Full" Source="Images/Full.png" Height="60" Width="60" Margin="430,678,0,0" MouseEnter="Full_MouseEnter" Visibility="Visible" />
    </Grid>
</Grid>

注意添加Grid“BrowserHolder”。由于首先添加了那个,因此添加到该控件的任何内容都会出现在图像后面。

所以你的代码变成了:

private void ShowTab(int index) 
{ 
    this.currentIndex = index;       
    UrlTextBox.Text = this.urls[this.currentIndex] ?? "Search"; 
    if (this.browsers[this.currentIndex] == null) 
    { 
        WebBrowser browser = new WebBrowser(); 
        this.browsers[this.currentIndex] = browser; 

        // NOTE: Changed to BrowserHolder
        BrowserHolder.Children.Add(browser); 

        browser.IsScriptEnabled = true; 
    } 
    for (int i = 0; i < NumTabs; i++) 
    { 
        if (this.browsers[i] != null) 
        { 
            this.browsers[i].Visibility = i == this.currentIndex ? Visibility.Visible : Visibility.Collapsed; 
        } 
    } 
}