2010-05-31 9 views
12

मैं ब्राउज़र नियंत्रण को एक बहुत ही सरल WPF एप्लिकेशन में उपयोग करने का प्रयास कर रहा हूं, और ऐसा लगता है कि ब्राउज़र उस पृष्ठ को लोड कर रहा है जिस पर मैंने अनुरोध किया था (मैं छवियों को माउसओवर कर सकता हूं और एएलटी टैग देख सकता हूं) , मैं वास्तव में कुछ और दिखाई नहीं कर सकते हैं:डब्ल्यूपीएफ ब्राउज़र वहां है, लेकिन अदृश्य

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

तो किसी को भी मदद कर सकते हैं मुझे यह पता लगाने क्यों ब्राउज़र याहू नहीं दिखा रहा है: alt text

यहाँ अनुप्रयोग के लिए XAML है होम पेज जैसे मैंने उससे पूछा? और जब मैं इसमें हूं, तो मैं इस तथ्य के मालिक बनने जा रहा हूं कि यह मेरा पहला डब्ल्यूपीएफ ऐप है, और मुझे अपने एक्सएएमएल में सामान्य नोबई बैडनेस से छुटकारा पाने के बारे में कोई सामान्य पॉइंटर्स सुनना अच्छा लगेगा।

धन्यवाद।

उत्तर

13

बस एक त्वरित जबाब दुर्भाग्य से, देर हो रही है ...

आप AllowsTransparency = "false" निर्धारित करने की आवश्यकता :)

+0

बिल्कुल सही तरह नियंत्रण के साथ साथ संगतता खोने के बिना। बहुत धन्यवाद। बहुत बुरा, हालांकि, पारदर्शिता असली सुंदर है। –

1

आप WebBrowser.Source संपत्ति की स्थापना कर रहे हैं? मैं Kaxaml में निम्नलिखित XAML की कोशिश की और यह ठीक काम किया:

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

सामान्य XAML नौसिखिया सुझावों के लिए के रूप में:

  • Height और Width का उपयोग कर और बदले सीखें कि कैसे लेआउट नियंत्रण के काम (DockPanel, StackPanel से बचें, ग्रिड, आदि)। यदि आप वास्तव में कुछ आकार लागू करना चाहते हैं, तो इस बात पर विचार करें कि MinWidth और MinHeight का उपयोग करना बेहतर होगा जो आप बेहतर चाहते थे।
  • अधिकांश नियंत्रणों में डिफ़ॉल्ट रूप से पारदर्शी पृष्ठभूमि होती है, इसलिए आपको इसे अपने XAML में रखने की आवश्यकता नहीं है।
  • मुझे स्क्रीन पर पाठ के टुकड़ों के लिए Label पर पक्षपात करना पड़ता है। आपका लाभ भिन्न हो सकता है, लेकिन अधिकांश उदाहरण मेरे अनुभव में TextBlock का उपयोग करते हैं।

संपादित

मैं एक साथ एक विकल्प के लेआउट आपको लगता है कि 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> 

आप के माध्यम से जाना और मार्जिन अद्यतन करने के लिए चाहते हो सकता है के रूप में देखने के लिए है करने के लिए आप इसे चाहते हैं।

इसके अलावा, आपके स्क्रीनशॉट से यह स्पष्ट है कि आपके पास कुछ अतिरिक्त शैलियों/टेम्पलेट्स भूमिका निभा रहे हैं क्योंकि XAML छवि में जो दिखाई देता है उससे मेल नहीं खाता है। शायद उन शैलियों से आने वाले मूल्य आपके नियंत्रण में गड़बड़ कर रहे हैं।

+0

ग्रेट उत्तर। डब्ल्यूपीएफ के बेहतर बिंदुओं के साथ सभी मदद के लिए बहुत बहुत धन्यवाद। यह मेरे लिए स्पष्ट हो रहा है कि WPF की सतह के नीचे सूक्ष्मता और कला का एक अच्छा सौदा है। –

+0

@ एडम, कोई चिंता नहीं। पारदर्शिता के बारे में बहुत बुरा है। मैंने ध्यान दिया कि, कक्समल में, ब्राउज़र शेष तत्वों के ऊपर तैरता प्रतीत होता था। इसमें कोई संदेह नहीं है कि यह विशेष हैंडलिंग प्राप्त करता है और शेष यूआई के ऊपर अतिसंवेदनशील होता है। –

4

WPF WebBrowser AllowTransparency = "True" के साथ काम नहीं करता है।

1

मुझे अभी एक समाधान मिला on this blog। असल में, यह सिर्फ एक और विंडो दिखाता है जहां वेबकंट्रोल होना चाहिए ... यह थोड़ा गंदा है, लेकिन यह बहुत अच्छी तरह से काम करता है :)

+0

बहुत अच्छा, थॉमस। पारितोषिक के लिए धन्यवाद। मैं इस समाधान tonght को लागू करने की कोशिश करूंगा। –

1

यह एक पुराना सवाल है लेकिन मैं जो करना चाहता हूं उसे पोस्ट करना चाहता था इसे काम करने के लिए।

जब आप कोई सीमा नहीं वाली खिड़की बनाना चाहते हैं जो आकार बदलने योग्य है और वेबब्रोसर नियंत्रण या फ़्रेम नियंत्रण होस्ट करने में सक्षम है, तो आप उस URL पर इंगित कर सकते हैं, जिसे आप आसानी से नहीं कर सकते थे, कहा गया नियंत्रण की सामग्री ओपी के रूप में खाली दिखाई देगी कहा हुआ।

मुझे हालांकि एक कामकाज मिला; विंडो में, यदि आप विंडो स्टाइल को किसी भी पर सेट नहीं करते हैं, तो ResizeMode को NoResize (मेरे साथ भालू, आप अभी भी एक बार फिर से आकार बदलने में सक्षम होंगे) फिर सुनिश्चित करें कि आपके पास अनचाहे अनुमति है ट्रांस्पेरेंसी आपके पास कोई सीमा वाला कोई स्थिर आकार वाली विंडो होगी और दिखाएगी ब्राउज़र नियंत्रण।

अब, आप शायद अभी भी सही आकार बदलने में सक्षम होना चाहते हैं? खैर हम कर सकते हैं एक इंटरॉप कॉल के साथ कि करने के लिए:

[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); 
    } 

और देखा, कोई सीमा के साथ एक WPF खिड़की है और अभी भी चल और आकार बदलने योग्य WebBrowser

संबंधित मुद्दे