2010-05-31 23 views
12

Tôi đang cố gắng sử dụng điều khiển Trình duyệt trong một ứng dụng WPF rất đơn giản và có vẻ như trình duyệt đang tải trang mà tôi yêu cầu (tôi có thể di chuột qua hình ảnh và xem các thẻ ALT) , tôi có thể không thực sự thấy bất cứ điều gì khác: alt textWPF Browser ở đó, nhưng vô hình

đây là XAML cho các ứng dụng:

<Window x:Class="SmokeyBox2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="SmokeyBox" Height="120" Width="510" ShowInTaskbar="False" 
     SizeToContent="WidthAndHeight" WindowStyle="None" AllowsTransparency="True" 
     MouseLeftButtonDown="Window_MouseLeftButtonDown"> 
    <Border Background="#50FFFFFF" CornerRadius="5" BorderThickness="2,0,2,2" 
      Padding="5 1 5 5"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"></ColumnDefinition> 
       <ColumnDefinition Width="Auto"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <Label Grid.Row="0" Grid.Column="0" Background="Transparent" Content="SmokeyBox" 
        MouseLeftButtonDown="Label_MouseLeftButtonDown" /> 
      <TextBox Grid.Row="1" Grid.Column="0" Name="searchText" Width="450" FontFamily="Arial" Foreground="DarkGray" 
        Background="Transparent" FontSize="20" MouseLeftButtonDown="searchText_MouseLeftButtonDown" 
        BorderBrush="Transparent" /> 
      <Expander Grid.Row="1" Grid.Column="1" Padding="2 3 0 0 " Expanded="Expander_Expanded" 
         Collapsed="Expander_Collapsed" /> 
      <WebBrowser Grid.Row="2" Grid.Column="0" x:Name="browser" Visibility="Visible" 
         Width="480" Height="480" Margin="2 2 2 2" ></WebBrowser> 
     </Grid> 
    </Border> 
</Window> 

vì vậy, bất cứ ai có thể giúp tôi hiểu tại sao trình duyệt không hiển thị Yahoo! trang chủ như tôi đã yêu cầu? Và trong khi tôi đang ở đó, tôi sẽ sở hữu thực tế rằng đây là ứng dụng WPF đầu tiên của tôi, và tôi rất muốn nghe bất kỳ gợi ý chung nào về cách loại bỏ badness noobie chung trong XAML của tôi.

Cảm ơn.

Trả lời

13

Chỉ cần một câu trả lời nhanh chóng không may, muộn rồi ...

Bạn cần phải thiết lập AllowsTransparency = "False" :)

+0

Đúng đúng. Cảm ơn nhiều. Mặc dù vậy, quá xấu, vì tính trong suốt thật đẹp. –

1

Bạn đang thiết lập các WebBrowser.Source bất động sản? Tôi đã thử các XAML sau trong Kaxaml và nó làm việc tốt:

<Page 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
     <Border> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"></RowDefinition> 
        <RowDefinition Height="Auto"></RowDefinition> 
        <RowDefinition Height="Auto"></RowDefinition> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"></ColumnDefinition> 
        <ColumnDefinition Width="Auto"></ColumnDefinition> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Row="0" Grid.Column="0" Text="SmokeyBox" /> 
       <TextBox Grid.Row="1" Grid.Column="0" Name="searchText" FontFamily="Arial" Foreground="DarkGray" 
         Background="Transparent" FontSize="20" BorderBrush="Transparent" /> 
       <Expander Grid.Row="1" Grid.Column="1" Padding="2 3 0 0" /> 
       <WebBrowser Source="http://www.yahoo.com" Grid.Row="2" Grid.Column="0" x:Name="browser" Visibility="Visible" 
          Margin="2 2 2 2" /> 
      </Grid> 
     </Border> 
    </Page> 

Đối với XAML chung lời khuyên người mới:

  • Tránh sử dụng HeightWidth và thay vào đó học cách điều khiển bố trí làm việc (DockPanel, StackPanel, Lưới, v.v.) Nếu bạn thực sự muốn thực thi kích thước của một cái gì đó, hãy xem xét việc sử dụng MinWidthMinHeight sẽ đạt được những gì bạn muốn tốt hơn.
  • Hầu hết các điều khiển đều có nền trong suốt theo mặc định, do đó bạn không cần phải đặt nó trong XAML của mình.
  • Tôi có xu hướng ưu tiên TextBlock trên Label cho các đoạn văn bản trên màn hình. Số dặm của bạn có thể thay đổi, nhưng hầu hết các ví dụ đều sử dụng TextBlock theo kinh nghiệm của tôi.

EDIT

Tôi đặt cùng một bố trí thay thế cho bạn rằng tránh việc sử dụng các Grid:

<Page 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
     <Border> 
      <DockPanel> 
       <TextBlock DockPanel.Dock="Top" Text="SmokeyBox" /> 
       <DockPanel DockPanel.Dock="Top"> 
        <Expander DockPanel.Dock="Right" Padding="2 3 0 0" /> 
        <TextBox Name="searchText" FontFamily="Arial" FontSize="20" /> 
       </DockPanel> 
       <WebBrowser Source="http://www.yahoo.com" x:Name="browser" Margin="2 2 2 2" /> 
      </DockPanel> 
     </Border> 
    </Page> 

Bạn có thể muốn đi qua và cập nhật bên lề để có nó trông như bạn muốn nó.

Ngoài ra, từ ảnh chụp màn hình của bạn, rõ ràng là bạn có một số kiểu/mẫu bổ sung đóng vai trò ở đây vì XAML không khớp với những gì được thấy trong hình ảnh. Có lẽ giá trị đến từ những phong cách đó đang rối tung với sự kiểm soát của bạn.

+0

Câu trả lời hay. Cảm ơn bạn rất nhiều vì đã giúp đỡ với những điểm tốt hơn của WPF. Nó trở nên rõ ràng với tôi rằng có rất nhiều tinh tế và nghệ thuật dưới bề mặt của WPF. –

+0

@Adam, không phải lo lắng. Quá xấu về tính minh bạch. Tôi lưu ý rằng, trong Kaxaml, trình duyệt dường như trôi nổi trên phần còn lại của các phần tử. Không nghi ngờ gì, nó được xử lý đặc biệt và được chồng lên trên phần còn lại của giao diện người dùng. –

4

WPF WebBrowser không hoạt động với AllowTransparency = "True".

1

Tôi vừa tìm thấy giải pháp on this blog. Về cơ bản, nó chỉ cho thấy một cửa sổ trên đầu trang của WebControl được cho là ... nó là một chút bẩn, nhưng nó hoạt động rất tốt :)

+0

Rất tuyệt, Thomas. Cảm ơn vì tiền hỗ trợ. Tôi sẽ thử triển khai thực hiện giải pháp này. –

1

Đây là một câu hỏi cũ nhưng tôi muốn đăng những gì tôi đã làm để làm cho nó hoạt động.

Khi bạn muốn tạo cửa sổ không có đường viền có thể định lại và có thể lưu trữ điều khiển WebBrowser hoặc điều khiển Khung được trỏ đến URL bạn không thể, nội dung của điều khiển được hiển thị sẽ trống như OP nói.

Tôi đã tìm được giải pháp thay thế; trong cửa sổ, nếu bạn đặt WindowStyle thành None, ResizeMode thành NoResize (chịu với tôi, bạn vẫn có thể thay đổi kích thước khi hoàn thành), sau đó chắc chắn rằng bạn đã UNCHECKED AllowTransparency, bạn sẽ có một cửa sổ có kích thước tĩnh không có viền và sẽ hiển thị điều khiển trình duyệt.

Bây giờ, bạn có thể vẫn muốn có thể thay đổi kích cỡ đúng không? Vâng, chúng tôi có thể để điều đó với một cuộc gọi interop:

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
    private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 

    [DllImportAttribute("user32.dll")] 
    public static extern bool ReleaseCapture(); 

    //Attach this to the MouseDown event of your drag control to move the window in place of the title bar 
    private void WindowDrag(object sender, MouseButtonEventArgs e) // MouseDown 
    { 
     ReleaseCapture(); 
     SendMessage(new WindowInteropHelper(this).Handle, 
      0xA1, (IntPtr)0x2, (IntPtr)0); 
    } 

    //Attach this to the PreviewMousLeftButtonDown event of the grip control in the lower right corner of the form to resize the window 
    private void WindowResize(object sender, MouseButtonEventArgs e) //PreviewMousLeftButtonDown 
    { 
     HwndSource hwndSource = PresentationSource.FromVisual((Visual)sender) as HwndSource; 
     SendMessage(hwndSource.Handle, 0x112, (IntPtr)61448, IntPtr.Zero); 
    } 

Và thì đấy, Một cửa sổ WPF không có biên giới và vẫn di chuyển và thay đổi kích thước mà không làm mất khả năng tương thích với với các điều khiển như WebBrowser

Các vấn đề liên quan