Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何";“设置”;Windows 10通用应用程序中带有组合框的选定相机_C#_Wpf_Windows_Win Universal App - Fatal编程技术网

C# 如何";“设置”;Windows 10通用应用程序中带有组合框的选定相机

C# 如何";“设置”;Windows 10通用应用程序中带有组合框的选定相机,c#,wpf,windows,win-universal-app,C#,Wpf,Windows,Win Universal App,我正在开发windows应用程序。我想使用windows Universal App或WPF中的组合框从前置摄像头切换到后置摄像头 我写了一些东西,但我不知道我哪里出错了 这是我的密码: <ComboBox x:Name="SettingsCamera" HorizontalAlignment="Stretch" Grid.Row="1" Grid.Column="0" Margin="0,5" SelectionChanged="SettingsCamera_SelectionCha

我正在开发windows应用程序。我想使用windows Universal App或WPF中的
组合框
从前置摄像头切换到后置摄像头

我写了一些东西,但我不知道我哪里出错了

这是我的密码:

<ComboBox  x:Name="SettingsCamera"  HorizontalAlignment="Stretch" Grid.Row="1" Grid.Column="0" Margin="0,5" SelectionChanged="SettingsCamera_SelectionChanged"/>

private async void InitializeCameraAsync()
        {DeviceInformation device = FindCameraDeviceByPanelAsync(Windows.Devices.Enumeration.Panel desiredPanel);



                var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(Windows.Devices.Enumeration.DeviceClass.VideoCapture);
                SettingsCamera.Items.Clear();
                //_deviceList = new List<Windows.Devices.Enumeration.DeviceInformation>();
                // Add the devices to deviceList
                if (devices.Count > 0)
                {
                    for (var i = 0; i < devices.Count; i++)
                    {
                       // _deviceList.Add(devices[i]);
                        SettingsCamera.Items.Add(devices[i].Name);
                    }
                }

                else
                {
                    Debug.WriteLine("No camera device is found ");
                }
        }

private async void SettingsCamera_SelectionChanged(object sender,SelectionChangedEventArgs e){
            if (SettingsCamera.SelectedIndex == 0)
            {

                try
                {
                    var allVideoDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
                    //SettingsMicrophone.Items.Clear();
                    var frontCamera = allVideoDevices.FirstOrDefault(d => d.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Front);


                    if (allVideoDevices.Count == 0)
                    {
                        SettingsCamera.Items.Add(frontCamera.Name);
                    }
                }
                catch (NullReferenceException)
                {
                    //audioExist = false;
                    SettingsCamera.Items.Add("No michrophone on your system");
                }




            }
            else if (SettingsCamera.SelectedIndex == 1 && SettingsCamera.SelectedIndex == 2 && SettingsCamera.SelectedIndex == 3)
            {

                try
                {
                    var allVideoDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
                    var backCamera = allVideoDevices.FirstOrDefault(d => d.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Front);
                    //SettingsMicrophone.Items.Clear();
                    if (allVideoDevices.Count >=2)
                    {
                        SettingsCamera.Items.Add(backCamera.Name);
                    }
                    SettingsCamera.Items.Add(backCamera.Name);

                    //make first cam default
                }
                catch (NullReferenceException)
                {
                    //audioExist = false;
                    SettingsCamera.Items.Add("No michrophone on your system");
                }

            }


        }

私有异步void InitializeCameraAsync()
{DeviceInformation device=FindCameraDeviceByPanelAsync(Windows.Devices.Enumeration.Panel desiredPanel);
var devices=wait Windows.devices.Enumeration.DeviceInformation.findalsync(Windows.devices.Enumeration.DeviceClass.VideoCapture);
setingscamera.Items.Clear();
//_deviceList=新列表();
//将设备添加到deviceList
如果(devices.Count>0)
{
对于(var i=0;id.EnclosureLocation.Panel==Windows.Devices.Enumeration.Panel.Front);
如果(allVideoDevices.Count==0)
{
设置scamera.Items.Add(frontCamera.Name);
}
}
捕获(NullReferenceException)
{
//audioExist=false;
设置scamera.Items.Add(“系统上没有麦克风”);
}
}
else if(SettingsCamera.SelectedIndex==1&&SettingsCamera.SelectedIndex==2&&SettingsCamera.SelectedIndex==3)
{
尝试
{
var allVideoDevices=等待设备信息.findalsync(DeviceClass.VideoCapture);
var backCamera=allVideoDevices.FirstOrDefault(d=>d.EnclosureLocation.Panel==Windows.Devices.Enumeration.Panel.Front);
//设置Microphone.Items.Clear();
如果(allVideoDevices.Count>=2)
{
设置scamera.Items.Add(backCamera.Name);
}
设置scamera.Items.Add(backCamera.Name);
//将第一个凸轮设为默认值
}
捕获(NullReferenceException)
{
//audioExist=false;
设置scamera.Items.Add(“系统上没有麦克风”);
}
}
}

我用MobileMulator版本10240测试了您的代码,下图显示了我得到的结果:

在我这边,如果您选择项目“SoCaptureSim RFC”,则
SelectedIndex
为0,如果您选择项目“SoCaptureSim FFC”,则
SelectedIndex
为1

但是根据您的
设置密码a\u SelectionChanged(object sender,SelectionChangedEventArgs e)
方法,当我选择项目“SoCaptureSim FFC”时,不会发生任何事情,因为您的
else条件是
SettingsCamera.SelectedIndex==1&&SettingsCamera.SelectedIndex==2&&SettingsCamera.SelectedIndex==3
,所以
组合框不支持多重选择

因此,如果(setingscamera.SelectedIndex==1 | | setingscamera.SelectedIndex==2 | | setingscamera.SelectedIndex==3)
,您可能需要的是

代码中还有两个问题,
DeviceInformation device=FindCameraDeviceByPanelAsync(Windows.Devices.Enumeration.Panel desiredPanel)
InitializeCameraAsync()
方法中,虽然您没有发布
FindCameraDeviceByPanelAsync(Windows.Devices.Enumeration.Panel desiredPanel)
方法的代码,但根据左边的代码,我认为您在这里传递了错误的参数

InitializeCameraAsync()
方法中,我可以理解您希望找到所有相机设备并将设备添加到
组合框的列表中,但是当您选择索引0时

if (allVideoDevices.Count == 0)
{
    SettingsCamera.Items.Add(frontCamera.Name);
}
如果
allVideoDevices.Count==0
,此
var-frontCamera=allVideoDevices.FirstOrDefault(d=>d.EnclosureLocation.Panel==Windows.Devices.Enumeration.Panel.Front),则此代码在这里没有意义首先将导致空指针错误


因为我没有看到你打开相机拍照或录音的任何代码,你可以向官员咨询,看看如何让相机工作

你的意图有点不清楚。您想知道如何在所选项目更改时设置属性,还是以编程方式更改组合框的所选项目?你能解释一下你说“用组合框设置一个选定的摄像头”是什么意思吗?我正在填充我的组合框:在这种情况下,我有两个摄像头,一个是前摄像头,一个是后摄像头,具体取决于你使用的设备Surface或笔记本电脑。现在,如果我在组合框中选择第一项,我想将相机更改为FrontCamera并设置该值,如果我在组合框中选择第二项,我想从FrontCamera更改并设置BackCamera值。换句话说,var FrontCamera=allVideoDevices.FirstOrDefault(d=>d.EnclosureLocation.Panel==Windows.Devices.Enumeration.Panel.Front);不是根据linq查询中的条件从所有VideoDevices返回对象吗?对吗