none
[wpf] 关于内容控件的content,未将对象引用设置到对象的实例 RRS feed

  • 问题

  • 我用wpf写如下语句:
    label1.Content = slider_Show_nDays.Value.ToString () + " (天)历史记录";  //报错:未将对象引用设置到对象的实例
    this.Title = slider_Show_nDays.Value.ToString() + " (天)历史记录"; //按预想在标题栏实现结果
    textBox1.IsReadOnly = true;  //报错:未将对象引用设置到对象的实例
    textBox1.Text = slider_Show_nDays.Value.ToString() + " (天)历史记录";  //报错:未将对象引用设置到对象的实例
    这是怎么回事?原来用form写,这些都是很正常通过的,从来没报过错。怎么wpf这么多错呢?我最主要看重wpf的新,且图形过度平滑,没有闪烁;但这是哪里不对?

    谢谢!
    • 已移动 RickyLinModerator 2009年10月25日 14:43 这属于WPF问题。 (发件人:Visual C#)
    2009年10月25日 8:22

答案

  • Slider和文本框排序问题 Slider在加载时触发 valuechanged事件 这时文本框没有加载造成的null
    解决方法是 把文本框放在Slider前面即可
    • 已标记为答案 OpenNovo 2009年10月26日 5:27
    2009年10月26日 4:25
  • 我试过了,可以的;只要直接修改windows1.xaml 修改成这样,把label标签的说明提到slider前面来,就可以了。
    <Label Grid.RowSpan="2" Height="28" Margin="75,0,47,8" Name="label_Show_nDays" VerticalAlignment="Bottom">Label</Label>
                <Slider Margin="6,6,6,0" Name="slider_Show_nDays" Visibility="Visible" Minimum="2" ValueChanged="slider_Show_nDays_ValueChanged" SmallChange="1" Ticks="1" Height="25" VerticalAlignment="Top" />

    真是没想到,原来form根本没有这种代码,也就没发现它们的先后顺序竟然有如此讲究。这个看来只能自己小心避免了。

    太谢谢啦!长见识了。
    • 已标记为答案 OpenNovo 2009年10月26日 5:27
    2009年10月26日 5:27

全部回复

  • 你贴出wpf代码! 可能没有定义name 也可能在  InitializeComponent()之前执行那些代码造成的

    2009年10月25日 14:49
  • wpf代码没做专门修改,其他一切都是系统自己生成的,我没有做任何自定义的修改。难道要做吗?initalizeComponent应该是最先执行的,我以上四句是连在一起,写在slider被拖动变更的事件里的。虽然这个事件属于引导的时候也要运行,但为什么窗口标题栏的content可以接受字符串赋值而不出错,但label和textbox的content就不行?
    2009年10月25日 16:35
  • <Window x:Class="ShowWave.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ShowWave" Height="602" Width="1109" Loaded="Window_Loaded">
        <Grid>
            <GroupBox Header="Setup" Margin="0,12,12,12" Name="Setup_GroupBox" HorizontalAlignment="Right"  Width="253"></GroupBox>
            <Grid Name="grid1" Width="242" HorizontalAlignment="Right" Margin="0,28.837,23,12">
                <Grid.RowDefinitions>
                    <RowDefinition Height="48" />
                    <RowDefinition Height="24" />
                    <RowDefinition Height="48*" />
                </Grid.RowDefinitions>
                <Slider Margin="6,6,6,0" Name="slider_Show_nDays" Visibility="Visible" Minimum="2" ValueChanged="slider_Show_nDays_ValueChanged" SmallChange="1" Ticks="1" Height="25" VerticalAlignment="Top" />
                <CheckBox Grid.Row="1" Margin="6,6,6,0" Name="checkBox1" Height="18" VerticalAlignment="Top">日期分割线</CheckBox>
                <ListBox Grid.Row="2" Margin="6" Name="StockCodeNameList" SelectionChanged="StockCodeNameList_SelectionChanged" />
                <TextBox Grid.RowSpan="2" Margin="60,29,62,20" Name="label_Show_nDays" />   //应该是这个位置,我现在用textbox也不通过!!
            </Grid>
            <Canvas Height="178.001" Margin="18,28.836,275,0" Name="K_Line_Canvas" VerticalAlignment="Top" />
            <Canvas Margin="18,234.837,275,154.164" Name="BuySale_Canvas" />
            <Canvas Height="112" Margin="18,0,276,18" Name="DealMeasure_Canvas" VerticalAlignment="Bottom" />
        </Grid>
    </Window>


    这是windows1.xaml.cs:
    private void slider_Show_nDays_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
            {
                //以下注释的都是运行报错的语句

                //label_Show_nDays.Content = slider_Show_nDays.Value.ToString () + " (天)历史记录";
                this.Title = slider_Show_nDays.Value.ToString() + " (天)历史记录";
                //label_Show_nDays.IsReadOnly = true;
                //label_Show_nDays.Text = slider_Show_nDays.Value.ToString() + " (天)历史记录";
             }

    2009年10月26日 1:50
  • Slider和文本框排序问题 Slider在加载时触发 valuechanged事件 这时文本框没有加载造成的null
    解决方法是 把文本框放在Slider前面即可
    • 已标记为答案 OpenNovo 2009年10月26日 5:27
    2009年10月26日 4:25
  • 我试过了,可以的;只要直接修改windows1.xaml 修改成这样,把label标签的说明提到slider前面来,就可以了。
    <Label Grid.RowSpan="2" Height="28" Margin="75,0,47,8" Name="label_Show_nDays" VerticalAlignment="Bottom">Label</Label>
                <Slider Margin="6,6,6,0" Name="slider_Show_nDays" Visibility="Visible" Minimum="2" ValueChanged="slider_Show_nDays_ValueChanged" SmallChange="1" Ticks="1" Height="25" VerticalAlignment="Top" />

    真是没想到,原来form根本没有这种代码,也就没发现它们的先后顺序竟然有如此讲究。这个看来只能自己小心避免了。

    太谢谢啦!长见识了。
    • 已标记为答案 OpenNovo 2009年10月26日 5:27
    2009年10月26日 5:27