2016-01-20 94 views
0

编辑:请参阅下面的我找到的解决方案。WPF组合框SelectedItem不与ItemsSource

我试图创建在拉从Fonts.SystemFontFamilies所有可用的字体,然后选择根据项目设置的WPF/C#组合框。

我遇到的问题是,该的ItemsSource工作,但的SelectedItem绑定设置中清除设置当Mode =双向,或不选择当Mode =单向的项目。

这里是我的XAML:

<ComboBox Name="customFontFace" SelectionChanged="customFontFace_SelectionChanged" ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}" SelectedItem="{Binding Default.CustomFontFace, Source={StaticResource Settings}, Mode=TwoWay}" /> 

而后面的代码一点点:

public Settings() 
{ 
    InitializeComponent(); 
    customFontFace.SelectedItem = MyApplication.Properties.Settings.Default.CustomFontFace; 
} 
private void customFontFace_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    // Doing nothing as of yet 
} 

在Settings.settings,为CustomFontFace默认设置为索拉。如果我添加一些日志记录输出,我会看到该设置显示Consolas,但根据设置绑定模式,可能会被组合框遮住,或者不会更新组合框,具体取决于设置绑定模式。

我试过所有的模式,并尝试在几个地方设置SelectedItem,我就空了。有什么想法吗?

编辑:找到我的答案。通过将字符串的CustomFontFace类型更改为System.Windows.Media.FontFamily,该绑定按预期工作。由于有一个FontFamily(字符串源)构造函数,因此“Consolas”的默认值仍然有效。

我仍然无法在代码隐藏方面完美地工作,但这是一个更简单的解决方案。作为参考,如果我用这个在我的代码隐藏,它的工作,但前提是XAML有对的SelectedItem绑定:

customFontFace.SelectedValue = Fonts.SystemFontFamilies.FirstOrDefault(x => x == MyApplication.Properties.Settings.Default.CustomFontFace); 

有事时CustomFontFace是一个字符串,并且两个XAML绑定和代码 - 后面尝试设置SelectedValue,其中组合框值最终为空白。我没有足够的日志来查看到底发生了什么。

+0

它是如何去无'customFontFace.SelectedItem = ...'? – dytori

回答

0

以什么形式存储您的默认值?如果你把它作为一个字符串,你可能需要做一些事情,如:

customFontFace.SelectedItem = Fonts.SystemFontFamilies.FirstOrDefault(MyApplication.Properties.Settings.Default.CustomFontFace); 

由于WPF使用.Equals方法制定出选择哪个项目,如果你在一个字符串传递它可能无法正常工作。

如果你想使用XAML来做到这一点,你可以这样做:

<ComboBox 
      ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}" 
      DisplayMemberPath="Source" 
      SelectedValuePath="Source" 
      SelectedValue="{Binding Source={x:Static myapplication:Settings.Default}, Path=CustomFontFace}"/> 

我希望这有助于:)

+0

这非常接近我所需要的。这结束了工作: 'customFontFace.SelectedValue = Fonts.SystemFontFamilies.FirstOrDefault(X => x.Source == MyApplication.Properties.Settings.Default.CustomFontFace);' 的XAML抛出一个错误对我来说,“ WPF应用程序不支持设置。“ –

+0

编辑到上面:我找到了一个更简单的解决方案。通过将Settings.Default.CustomFontFace的类型从字符串更改为System.Windows.Media.FontFamily,XAML不需要代码隐藏。用这个更新问题。 –

相关问题