Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#可以包含其他控件的用户控件(使用时)_C#_Wpf_User Controls - Fatal编程技术网

C#可以包含其他控件的用户控件(使用时)

C#可以包含其他控件的用户控件(使用时),c#,wpf,user-controls,C#,Wpf,User Controls,我为ASP找到了一些关于这个问题的信息,但它对我没有多大帮助 我想做的是:我想创建一个用户控件,该控件将集合作为属性,并使用按钮在该集合中导航。我希望能够将此用户控件绑定到集合,并在其上显示不同的控件(包含来自该集合的数据)。 就像你在MS Access中的表单下边缘一样 更准确地说: 当我在应用程序中实际使用该控件时(在我创建它之后),我希望能够在和之间向其添加多个控件(文本框、标签等) 如果我现在这样做,我的用户控件上的控件将消失。下面是一个执行您所需操作的方法的示例: 首先是代码-User

我为ASP找到了一些关于这个问题的信息,但它对我没有多大帮助

我想做的是:我想创建一个用户控件,该控件将集合作为属性,并使用按钮在该集合中导航。我希望能够将此用户控件绑定到集合,并在其上显示不同的控件(包含来自该集合的数据)。 就像你在MS Access中的表单下边缘一样

更准确地说:

当我在应用程序中实际使用该控件时(在我创建它之后),我希望能够在
之间向其添加多个控件(文本框、标签等)
如果我现在这样做,我的用户控件上的控件将消失。

下面是一个执行您所需操作的方法的示例:

首先是代码-UserControl1.xaml.cs

public partial class UserControl1 : UserControl
{
    public static readonly DependencyProperty MyContentProperty =
        DependencyProperty.Register("MyContent", typeof(object), typeof(UserControl1));


    public UserControl1()
    {
        InitializeComponent();
    }

    public object MyContent
    {
        get { return GetValue(MyContentProperty); }
        set { SetValue(MyContentProperty, value); }
    }
}
以及用户控件的XAML-UserControl1.XAML

<UserControl x:Class="InCtrl.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300" Name="MyCtrl">
    <StackPanel>
        <Button Content="Up"/>
        <ContentPresenter Content="{Binding ElementName=MyCtrl, Path=MyContent}"/>
        <Button Content="Down"/>
    </StackPanel>
</UserControl>

最后,xaml将使用我们出色的新控件:

<Window x:Class="InCtrl.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:me="clr-namespace:InCtrl"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <me:UserControl1>
            <me:UserControl1.MyContent>
                <Button Content="Middle"/>
            </me:UserControl1.MyContent>
        </me:UserControl1>
    </Grid>
</Window>

用户控件可能不是最好的方法。您希望在内容周围添加装饰,这基本上就是Border所做的:它有一个子元素,并在边缘周围添加自己的内容

查看Border从中派生的Decorator类。如果你让你自己的边界后裔,你应该可以很容易地做你想做的。然而,我相信这需要编写代码,而不是XAML


您可能仍然希望创建一个UserControl来包装底部的按钮,这样您就可以使用可视化设计器来完成部分过程。但Decorator将是一种很好的方式,可以将各个部分粘合在一起,并允许用户定义内容。

我很难理解您的问题,但我认为您所描述的是一种用于显示(大概是)一个的内容。

这里是一个内置控件(
HeaderedContentControl
)这与公认的答案是一样的,只是它是WPF中的一个现有控件,因为.NET3.0

有什么问题?这听起来很容易做到…问题不在于集合和导航按钮,而在于当我在另一个应用程序中使用用户控件时,我希望能够将控件添加到用户控件中。如果我尝试在两者之间放置多个控件,则会出现一个错误,即我只能在其中放置一个控件。如果我尝试使用网格,自定义控件上的控件将消失。我希望看到执行此操作的代码。如果我没有弄错MAD9,他想要一个用户控件,其中部分内容是静态的,但它还有一个部分,您可以从父窗口XAML添加控件。非常感谢大家!2件事:我不是以英语为母语的人,所以请原谅我对实际问题的描述可能不准确。我不知道有一个项目控件这样的东西,所以我会看看它能做什么。如果不是,我需要的是我会尝试Nirs解决方案(或者两者兼而有之,这样我可以学到一些东西)。再次感谢大家@NIR + 1我正在玩这个相同的解决方案,但我不能完全使它工作-我错过了内容演示者的内容属性的绑定。也考虑这个线程:这是我最终实现的解决方案。正如我所注意到的,这个控件甚至没有必要包含其他控件。你的答案更符合我的需要(我相信),但Nirs解决方案更符合我上面所描述的。因为只有一个答案是可能的,所以我在他的答案上打了勾。但我目前正在评估Items控件可以做什么,这似乎与我所想的差不多(有一些定制)。谢谢