我在使用WPF组合框时遇到了一些麻烦。我的应用程序使用组合框列出要连接的可用IP地址,并在启动时自动填充上次选择的IP地址。因此,当应用程序启动并加载文件时,框显示如下:
单击连接按钮后,程序将启动另一个程序,该程序将启动,然后由我的应用程序最小化。当焦点返回到我的应用程序时,组合框现在为空,如下所示:
起初我的想法是一个绑定错误(控制台中没有报告任何内容),但似乎并非如此。所选项目绑定的属性和所选项目本身(在WPF元素上)都是有效的。我在属性的setter上设置了一个断点,没有任何异常情况发生。我还有一个单独的线程直接从WPF元素每隔0.5秒打印一次所选项目。即使IP地址不再可见,所选项目仍为“192.168.3.106。”
有没有人对可能出现的问题有任何想法。相关代码如下。如果需要更多信息,请告诉我。
XAML:
<StackPanel Name="Stack">
<Label Content="Active Projector"/>
<ComboBox
Name="ProjectorComboBox"
BorderBrush="DarkGray"
Background="Transparent"
Width="140"
ToolTip="Select the projector to use."
Loaded="ComboBox_Loaded"
ItemsSource="{Binding ProjectorSettings.Projectors}"
SelectedItem="{Binding SelectedProjector}">
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="ToolTip" Value="{Binding IP}"/>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
</StackPanel>
C#:
public Projector SelectedProjector
{
get
{
return _selectedProjector;
}
set
{
if (value == null)
{
System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow;
return;
}
_selectedProjector = value;
FirePropertyChanged("SelectedProjector");
_autoSelectedProjector = false;
RefreshProjector();
}
}
public void LaserComboboxLoaded()
{
var currentProjector = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\LAP\\LaserProjector\\Settings", "GatewayIP", string.Empty);
if (currentProjector != null)
{
foreach (Projector proj in _projectorSettings.Projectors)
{
if (proj.IP == currentProjector as string)
{
_selectedProjector = proj;
FirePropertyChanged("SelectedProjector");
if (!LaserTool.IsProjecting)
{
_autoSelectedProjector = true;
}
}
}
}
}