У меня есть Combobox, чей ItemTemplate привязан к DataTemplate, содержащему один из моих собственных элементов управления ярлыками. Все пользовательские элементы управления локализуют назначенный ему контент.Silverlight Combobox ItemTemplate Stuck Отображение первого выбранного элемента
Комбинация (при закрытии) отобразит текст первого выбранного элемента. Однако, когда выбранный элемент изменен, отображение закрытого Combobox не будет обновляться. Я знаю, что фактический выбранный элемент обновлен, потому что он связан с изменением свойства. Единственная проблема - текст дисплея.
Так, например, если я выберу элемент с текстом «Пункт 1», закрытое Combobox отобразит «Item 1». Затем, если я выберу «Item 2», закрытый Combobox все равно отобразит «Item 1».
Вот как это настроить («Name» это свойство элементов привязки в ItemsSource):
<Grid.Resources>
<DataTemplate x:Key="MyTemplate">
<MyCustomLabel Content="{Binding Name}" />
<DataTemplate>
</Grid.Resources>
<Combobox ItemsSource="{Binding MyItems}" ItemTemplate="{StaticResource MyTemplate}" />
Ниже приведен код для моего контроля этикетки:
public class MyLabel : Label
{
/// <summary>
/// When reassigning content in the OnContentChanged method, this will prevent an infinite loop.
/// </summary>
private bool _overrideOnContentChanged;
protected override void OnContentChanged(object oldContent, object newContent)
{
// if this method has been called recursively (since this method assigns content)
// break out to avoid an infinite loop
if (_overrideOnContentChanged)
{
_overrideOnContentChanged = false;
return;
}
base.OnContentChanged(oldContent, newContent);
var newContentString = newContent as string;
if (newContentString != null)
{
// convert the string using localization
newContentString = LocalizationConverter.Convert(newContentString);
// override the content changed method
// will prevent infinite looping when this method causes itself to be called again
_overrideOnContentChanged = true;
Content = newContentString;
}
}
}
Любой совет будет весьма признателен. Благодаря!
Это не ярлык, который должен быть изменен в комбинированном ящике. В комбинированном поле создается метка для каждого элемента в ItemsSource. – Maciek