【问题标题】:wpf - can't use custom controlwpf - 无法使用自定义控件
【发布时间】:2013-09-29 21:33:16
【问题描述】:

我在 StackPanel 中有一个自定义控件

<Window x:Class="Video_Editor.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    xmlns:m="clr-namespace:Video_Editor">
<Grid>
    </StackPanel>
    <ScrollViewer Margin="10,40,10,10" Grid.Row="2" VerticalScrollBarVisibility="Auto">
        <StackPanel Name="stackPanel" >
            <m:CustomControl Name="testControl"/>
        </StackPanel>
    </ScrollViewer>
</Grid>

自定义控件目前不做任何事情。

public class CustomControl: ItemsControl
{
}

我尝试在窗口的构造函数中这样做:

public MainWindow()
{
    InitializeComponent();
    testControl.Items.Add("item");
}

我收到一个错误“名称”testControl 在当前上下文中不存在。

【问题讨论】:

  • 你真的应该使用数据绑定而不是代码隐藏。
  • 对了,你自定义控件是做什么的?
  • @HighCore 这只是一个例子。如果这个语句在这里不起作用,它就不会在我需要的地方起作用。
  • 我的观点是,除非您有充分的理由,否则您通常不会子类化 WPF 控件。再说一次,你真的应该使用数据绑定。 m 命名空间是如何声明的?发布完整的 XAML。
  • 我刚刚用完整的 xaml 更新了问题

标签: c# wpf custom-controls


【解决方案1】:

您必须使用 x:Name,因为您是从另一个 FrameworkElement 派生而来的,该 Name 属性本身已暴露。

如果FrameworkElement 已设置其Name 属性(ItemsControl 似乎正在这样做),则不能在派生类型上声明Name 属性,但可以使用Xaml x:Name 属性这样您就可以删除 Name 并从后面的代码访问

例子:

    <StackPanel Name="stackPanel" >
        <m:CustomControl x:Name="testControl"/>
    </StackPanel>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多