编辑:请参阅下面的我找到的解决方案。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,其中组合框值最终为空白。我没有足够的日志来查看到底发生了什么。
它是如何去无'customFontFace.SelectedItem = ...'? – dytori