C# 如何";“设置”;Windows 10通用应用程序中带有组合框的选定相机
我正在开发windows应用程序。我想使用windows Universal App或WPF中的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
组合框
从前置摄像头切换到后置摄像头
我写了一些东西,但我不知道我哪里出错了
这是我的密码:
<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返回对象吗?对吗