Ответ 1
Просто быстрый ответ, к сожалению, опаздывает...
Вам нужно установить AllowsTransparency = "False":)
Я пытаюсь использовать элемент управления браузера в очень простом WPF-приложении, и кажется, что, когда браузер загружает запрашиваемую мной страницу (я могу рисовать мышью изображения и видеть теги ALT), я не вижу на самом деле что-нибудь еще:
Вот XAML для приложения:
<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>
Так может кто-нибудь помочь мне понять, почему браузер не показывает Yahoo! как я его просил? И пока я нахожусь в этом, я собираюсь признать, что это мое первое приложение WPF, и мне бы хотелось услышать какие-либо общие указания о том, как избавиться от общей ошибки noobie в моем XAML.
Спасибо.
Просто быстрый ответ, к сожалению, опаздывает...
Вам нужно установить AllowsTransparency = "False":)
Веб-браузер WPF не работает с AllowsTransparency = "True".
Вы устанавливаете свойство WebBrowser.Source
? Я попробовал следующий XAML в Kaxaml, и он отлично работал:
<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, Grid и т.д.). Если вы действительно хотите обеспечить какой-то размер, подумайте, сможет ли использование MinWidth
и MinHeight
достичь желаемого.TextBlock
над 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 не соответствует тому, что видно на изображении. Возможно, ценности, исходящие из этих стилей, беспорядочны с вашим контролем.
Я только что нашел решение в этом блоге. В принципе, это просто показывает другое окно поверх того, где WebControl должен быть... он немного грязный, но он работает очень хорошо:)
Это старый вопрос, но я хотел опубликовать то, что я сделал, чтобы заставить его работать.
Если вы хотите создать окно без рамки, которая может быть изменена по размеру и может размещать элемент управления WebBrowser или элемент управления Frame, указывающий на URL-адрес, который вы просто не можете, содержимое указанного элемента управления будет отображаться пустым, поскольку OP сказал.
Я нашел обходное решение; в окне, если вы установите WindowStyle равным None, ResizeMode в NoResize (несите меня, вы все равно сможете изменить размер после завершения), тогда убедитесь, что у вас есть UNCHECKED AllowsTransparency, у вас будет окно статического размера без рамки и покажет управления браузером.
Теперь вы, вероятно, все еще хотите иметь право изменять размер? Ну, мы можем с этим с помощью вызова 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);
}
И voila, Окно WPF без рамки и все еще подвижное и изменяемое без потери совместимости с элементами управления, такими как WebBrowser