Пустое значение ComboBox C#
Имею такой код, который вызывается после изменения ComboBox:
private void ComboBox_Selected(object sender, RoutedEventArgs e)
{
ComboBox cb = (ComboBox)sender;
TextBlock tx = (TextBlock)cb.SelectedItem;
string shir = tx.Text;
Properties.Settings.Default.Shir1 = shir;
Properties.Settings.Default.Save();
MessageBox.Show(shir);
}
Переменная shir выходит пустой
Вот мой XAML код:
<ComboBox x:Name="combobox" SelectionChanged="ComboBox_Selected" SelectedIndex="0" Style="{Binding}" HorizontalAlignment="Left" Margin="73,139,0,0" VerticalAlignment="Top" Width="127" Height="23" Foreground="Black" BorderBrush="{x:Null}" Background="{x:Null}">
<TextBlock><Run Text="800x600"/></TextBlock>
<TextBlock><Run Text="1024x780"/></TextBlock>
<TextBlock><Run Text="1280x768"/></TextBlock>
<TextBlock><Run Text="1440x900"/></TextBlock>
<TextBlock><Run Text="1536x1024"/></TextBlock>
<TextBlock><Run Text="1600x900"/></TextBlock>
<TextBlock><Run Text="1920x1080"/></TextBlock>
<TextBlock><Run Text="2048x1080"/></TextBlock>
<TextBlock><Run Text="2560x1600"/></TextBlock>
</ComboBox>
Ответы (1 шт):
Если решать именно поставленную вами задачу и отвечать на вопрос "почему пустое значение", то все дело в том, что вы непойми зачем используете внутри <TextBlock> еще и <Run>, вот теперь подумайте, у вас есть такая иерархия:
<TextBlock Text = "">
<Run Text = "800x600" />
</TextBlock>
Что выдаст вам данный код?
TextBlock tx = (TextBlock)cb.SelectedItem;
string shir = tx.Text;
Думаю, свою проблему вы поняли. Давайте теперь решать. У вас есть два выхода:
Отказаться от
<Run>(он у вас действительно лишний).Взять текст из него. Делается это примерно так:
var inline = tx.Inlines.FirstInline; var shir = new TextRange(inline.ContentStart, inline.ContentEnd).Text;
Но повторю еще раз: то, как вы разрабатываете WPF проект, это просто ужаснейший подход, ибо вы сами себе делаете грабли подобными действиями. Уберите из проекта все x:Name (кроме стилей) и пробуйте разрабатывать его так. Представьте, что у вас простой консольный проект, где вы оперируете только классами, а не интерфейсом, вот разработайте сначала эти слои, а уж затем думайте, как к этому всему прикрутить UI и не поверите, при помощи привязок и прочих инструментов WPF, UI можно (и нужно) полностью отделять от логики (читаем про MVVM)! Так что мой вам совет, забудьте про то, что вы сейчас делайте и начните учить привязки (примеров полно, даже вон вам ответ дали).