为什么在cam中无法识别在xaml中设置的用户控件?

时间:2015-02-15 16:57:46

标签: c# wpf xaml

我创建了一个简单的用户控件并在xaml文件中使用它(mainWindow.xaml)。

我命名了用户控件的实例VolumeMeter,然后尝试在cs文件(mainWindow.cs)的函数中使用它但名称无法识别

  

当前上下文中不存在该名称

为什么会这样,我该怎么做才能解决它?

XAML:

<Window x:Class="testUserControl.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:MyNameSpace="clr-namespace:testUserControl.UserControls"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Button Name="btnShow" Content="Show"></Button>
        <StackPanel Name="stkTest" Grid.Row="1" Orientation="Vertical">
            <MyNameSpace:UserControl1 Name="VolumeMeter"></MyNameSpace:UserControl1>
        </StackPanel>
    </Grid>
</Window>

cs文件:

namespace testUserControl
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnShow_Click_1(object sender, RoutedEventArgs e)
        {
             VolumeMeter.Enable = false;//Compile error
        }
    }
}

3 个答案:

答案 0 :(得分:3)

尝试使用x:Name代替Name [msdn]

...
<StackPanel Name="stkTest" Grid.Row="1" Orientation="Vertical">
   <MyNameSpace:UserControl1 x:Name="VolumeMeter"></MyNameSpace:UserControl1>
</StackPanel>
...

答案 1 :(得分:1)

使用x:名称可行。请参阅In WPF, what are the differences between the x:Name and Name attributes?以获得非常好的解释。

答案 2 :(得分:0)

您应该使用x:Name而不是Name 看到这篇文章,看看差异 In WPF, what are the differences between the x:Name and Name attributes?