2015-02-24 2 views
0

Я работаю над приложением в WPF (C#), которое будет использовать веб-камеру, но у меня возникают проблемы с основным окном. Я получаю мой желаемый вид, когда я запускаю его в Windows 7, однако, когда я запускаю его на машине с Windows 8.1, он выглядит иначе.Окно WPF, отличное от Windows 8.1 и Windows 7

Это желаемый вид (Windows 7)

enter image description here

Это то, что он выглядит как на Windows, 8.1 (она не растягивается на весь экран при максимальной)

enter image description here

Вот мой код MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:cam="clr-namespace:WebcamControl;assembly=WebcamControl"  
Title="WPF Webcam" Height="664.333" Width="645"> 
<Window.Resources> 
    <DataTemplate x:Key="DevicesListTemplate"> 
     <TextBlock Text="{Binding Name}"/> 
    </DataTemplate> 
</Window.Resources> 


<Grid Margin="0,0,0,0"> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition Height="50"/> 
    </Grid.RowDefinitions> 
    <cam:Webcam Name="WebcamCtrl" Margin="10" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 

    <StackPanel Margin="0,0,0,0" Orientation="Horizontal" Grid.Row="1"> 
     <ComboBox HorizontalAlignment="Left" Height="23" Width="200" VerticalAlignment="Center" 
      x:Name="AudioDevicesComboBox" ItemTemplate="{StaticResource DevicesListTemplate}" Margin="10,0,10,0"/> 
     <ComboBox Height="22" Width="200" HorizontalAlignment="Right" VerticalAlignment="Center" 
      x:Name="VideoDevicesComboBox" ItemTemplate="{StaticResource DevicesListTemplate}" Margin="0,0,10,0"/> 
     <TextBox x:Name="tbScan" HorizontalAlignment="Left" Height="22" Margin="0,0,10,0" TextWrapping="Wrap" VerticalAlignment="Center" Width="100" KeyDown="tbScan_KeyDown"/> 
     <Button Content="Start" HorizontalAlignment="Left" Height="22" Margin="0,0,10,0" VerticalAlignment="Center" Width="78" Click="Button_Click_1"/> 
    </StackPanel> 

</Grid> 

Это XAML из пользовательского элемента управления веб

<UserControl x:Class="Webcam" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
     MinHeight="100" MinWidth="100" 
     mc:Ignorable="d"> 
<Grid> 
    <WindowsFormsHost Name="WinFormsHost" Margin="0" Background="{x:Null}"> 
     <wf:Panel x:Name="WebcamPanel"/> 
    </WindowsFormsHost> 
</Grid> 

Я также нашел это событие в исходном коде Webcam.dll.

Private Sub Webcam_SizeChanged(sender As Object, e As SizeChangedEventArgs) Handles Me.SizeChanged 
    If (deviceSource IsNot Nothing) Then 
     deviceSource.PreviewWindow.SetSize(New Size(CInt(Me.ActualWidth), CInt(Me.ActualHeight))) 
    End If 
End Sub 

Любая помощь была бы принята с благодарностью!

+0

Я добавил рамку вокруг элемента «cam: Webcam ..» в главном окне, и он растягивается, поэтому я думаю, что это должно быть что-то в пользовательском элементе управления веб-камерой, что не позволяет растягиваться. – mattc19

+0

Было бы трудно дать кому-либо конкретный совет без примера _minimal_, _complete_. Например. один, который показывает разницу в Win7 и Win8 с чистым кодом WPF, не используя библиотеку веб-камеры или аппаратное обеспечение. Тем не менее, вы пытались использовать свойство «Stretch» ​​в пользовательском элементе управления? –

+0

Вы пробовали обернуть его в окне просмотра? –

ответ

1

В главной сетке есть пространство между камерой: веб-камера и управление стоп-панелей. Итак, ваша камера: веб-камера растянута (настройки выравнивания не нужны, это поведение по умолчанию для сетки).

. Моя проблема связана с WindowsFormsHost или Panel. Я предпочитаю проверять ваш макет шпионом, как Snoop. Это поможет вам найти вашу проблему.

+0

Спасибо за ваш совет. Я обнаружил, что если я остановлю предварительный просмотр и перезагрузите его, он будет расширен до полноэкранного режима (в выигрыше 8.1). В Win7 мне не нужно перезапускать. Меня все еще беспокоит, что я не могу понять это, но по крайней мере у меня может быть только пожар событий, когда окно максимизирует перезапуск предварительного просмотра. – mattc19

+0

Я редактировал исходный вопрос, чтобы показать событие, которое запускается при изменении размера. Это событие из исходного кода dll, который я использовал для управления веб-камерой – mattc19

Смежные вопросы