0

私はWPFが初めてなので、いくつかのツールを開発しようとしています。2つのアイテムを持つコンボボックスがあります。

xamlコードは以下の通りです

<Window x:Class="New_generator2.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="500" Width="500">
    <Grid>

        <ComboBox Height="21" Margin="36,15,22,0" Name="comboBox1" VerticalAlignment="Top" AllowDrop="True" Text="" SelectionChanged="comboBox1_SelectionChanged">
            <ComboBoxItem Tag="1" IsSelected="True" Name="ComboBox_Rule_Parameter">Rule_Parameter</ComboBoxItem>
            <ComboBoxItem Tag="2" Name="ComboBox_Rule_Instance">Rule_Instance</ComboBoxItem>
        </ComboBox>

        <TextBox Height="25" HorizontalAlignment="Right" Margin="0,71,14,0" Name="Field_Code_textbox" VerticalAlignment="Top" Width="220"  Visibility="Hidden" />
        <TextBlock Height="25" HorizontalAlignment="Left" Margin="14,73,0,0"  Name="Field_Code" VerticalAlignment="Top" Width="220" TextBlock.FontSize="20" Background="BurlyWood" TextAlignment="Center"  Text="Data_Field_Code" Visibility="Hidden"/>
        <TextBox Height="84" Margin="35,0,23,12" Name="Script" VerticalAlignment="Bottom" Width="420" Visibility="Hidden"/>
        <Button Height="25" Margin="120,0,123,106" Name="Generate" VerticalAlignment="Bottom" TextBlock.FontSize="18" Background="BlanchedAlmond" TextBlock.TextAlignment="Justify" Click="button1_Click" Visibility="Hidden">Dispaly</Button>

    </Grid>
</Window>

そして、C#コードは以下の通りです

public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            Field_Code = new TextBlock();
        }

        private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (comboBox1.SelectedIndex == 0)
            {
                Field_Code.Visibility = Visibility.Visible;
            }
            if (comboBox1.SelectedIndex == 1)
            {
                Field_Code.Visibility = Visibility.Hidden;
            }
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Script.Text = Field_Code_textbox.Text;
        }
    }

これを実行すると、オブジェクト参照がオブジェクトのインスタンスに設定されていないという Null Exception が発生します。null 例外のスクリーンショットを添付しました。

ここに画像の説明を入力

この問題を解決するのを手伝ってください。

4

4 に答える 4

2

Field_Codeの初期化をコンストラクターのInitialiseComponent()の前に移動します。

于 2013-02-19T12:48:40.707 に答える
1

これは、変更されたコンボボックス選択が InitializeComponent() から呼び出され、この時点で Field_Code が初期化されていないために発生します。最も簡単な回避策は、Window1() コンストラクターのField_Code = new TextBlock();前に移動することです。InitializeComponent();

于 2013-02-19T12:50:47.250 に答える
0

変更されたコンボ選択は、InitializeComponent からトリガーされているようです。

于 2013-02-19T12:50:34.213 に答える
0

個人的には、次のようなプロパティを作成しpublic bool FieldCodeVisible { .. }、テキスト ボックスの可視性をそのプロパティにバインドします。

Field_Code.Visibility = Visibility.Visible;あなたが言うことができると言う代わりにFieldCodeVisible = true;

このようにして ViewModelにロジックを入れますが、ビューの on機能を決定できます

于 2013-02-19T12:56:18.313 に答える