首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >WPF .NET4.0重用UserControl的同一实例

WPF .NET4.0重用UserControl的同一实例
EN

Stack Overflow用户
提问于 2011-05-24 03:10:22
回答 3查看 5K关注 0票数 10

我希望将同一用户控件的实例显示两次。我尝试做了以下几件事:

代码语言:javascript
运行
AI代码解释
复制
<UserControl.Resources>
    <Views:MyControl View x:Key="_uc1" MinHeight="300"/>
</UserControl.Resources>

并尝试在TabControl中使用它:

代码语言:javascript
运行
AI代码解释
复制
<TabControl Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3" >
    <TabItem >
        <TabItem.Header>
            <TextBlock Text="Header1" FontWeight="13"/>
        </TabItem.Header>

        <StackPanel  >
            <ContentControl Content="{StaticResource _uc1}"/>
        </StackPanel>
    </TabItem>
    <TabItem >
        <TabItem.Header>
            <TextBlock Text="Header2" FontWeight="13"/>
        </TabItem.Header>

        <StackPanel MinHeight="600" >
            <ContentControl Content="{StaticResource _uc1}"/>
        </StackPanel>
    </TabItem>
</TabControl>

我收到错误消息:“{”指定的元素已经是另一个元素的逻辑子元素。请先断开连接。“}”

我想实现的目标有可能实现吗?

谢谢,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-24 03:14:55

事实并非如此。如错误所示,给定的对象只能在给定的逻辑树中出现一次。这有助于确保逻辑树保持为树。

如果你使用的是MVVM模式(或者通常只是使用DataBinding ),那么你可以将两个不同的UserControls绑定到同一个后台视图模型/数据上,这样两个控件就会有相同的行为和操作相同的状态表示。不过,您仍然需要两个不同的控件。

票数 9
EN

Stack Overflow用户

发布于 2011-05-24 03:22:07

在WPF (和Silverlight)中,一个控件不能出现在可视化树中的多个位置。您可以做的是拥有两个单独的用户控件实例,但将它们的相关属性绑定到相同的基础源代码。

例如,假设您有一个Contact对象,并且希望两个MyControl实例引用相同的FullName属性。

代码语言:javascript
运行
AI代码解释
复制
<UserControl>
    <UserControl.Resources>
        <my:Contact x:Key="data" FullName="Josh Einstein" />
    </UserControl.Resources>
    <TabControl DataContext="{StaticResource data}">
      <TabItem>
        <TabItem.Header>
          <TextBlock Text="Header1" FontWeight="13" />
        </TabItem.Header>
        <StackPanel>
          <!-- instance #1 -->
          <Views:MyControl FullName="{Binding FullName, Mode=TwoWay}" />
        </StackPanel>
      </TabItem>
      <TabItem>
        <TabItem.Header>
          <TextBlock Text="Header2" FontWeight="13" />
        </TabItem.Header>
        <StackPanel>
          <!-- instance #2 -->
          <Views:MyControl FullName="{Binding FullName, Mode=TwoWay}" />
        </StackPanel>
      </TabItem>
    </TabControl>
</UserControl>

如果您只希望单个控件出现在可视化树中的多个位置,但实际上不是交互式的,则可以使用VisualBrush将其“绘制”到另一个控件上。

票数 8
EN

Stack Overflow用户

发布于 2011-05-24 08:11:51

你不可能在两个地方拥有相同的控件,但你可以让它跳转,参见我的this answer中的一个例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6105309

复制
相关文章
WPF使用自定义控件UserControl
大佬们基本上都在讲怎么自定义控件,却怎么也没有说明怎么使用这些个自定义的控件,然后看完教程的本小白只能干瞪眼..可能大佬们不屑这样基础的东西 首先新建一个用户控件UserControl1.xaml,这个会用几下VS的应该都没有难度。
zls365
2021/10/19
1.9K0
wpf使用usercontrol自定义标签
使用模板contenttemplate,重写usercontrol,而不是在usercontrol里面直接加grid等标签,最后uesrcontrol的content通过
sofu456
2021/12/06
6010
Winform窗口里的嵌入WPF的UserControl,关闭Winform父窗体的方法
可以在form_load事件里把this传给UserControl,然后在usercontrol里调用form的各种方法,不过这种做法不太好,耦合性较高。标准做法是用事件传递 UserControl里加如下代码: public delegate void FormCloseEventHandler(object sender, EventArgs e); public event FormCloseEventHandler FormClose; private void button_quit_Clic
hbbliyong
2018/03/05
3K0
WPF 将控件放入到 UserControl 里获取 HwndSource 为空的情况
本文记录将 WPF 控件放入到 UserControl 里,如果此 UserControl 没有被设置 Visibility 为可见过,那么放在此 UserControl 内的控件将获取不到 HwndSource 内容
林德熙
2022/02/28
1.5K0
WPF 同一窗口内的多线程 UI(VisualTarget)
发布于 2017-10-30 15:38 更新于 2018-09-05 05:47
walterlv
2018/09/18
2.6K0
WPF 同一窗口内的多线程 UI(VisualTarget)
WPF grid布局实例
xaml <Window x:Class="WpfApp5.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
zls365
2020/08/19
6300
WPF grid布局实例
WPF MVVM实例一
在Model文件夹下新建业务类StudentModel(类文件StudentModel.cs),类的详细代码如下所示。
zls365
2021/02/01
7570
WPF MVVM实例一
WPF应用单实例
默认情况下 WPF应用是能够多开的,但是大部分情况下我们只想打开一个实例,这就有两种情况
码客说
2023/07/24
2660
WPF MVVM实例三
WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI。
zls365
2021/02/26
8630
在VisualStudio中提供运行时和设计时支持的WPF本地化解决方案
关于WPF本地化问题有许多其他的文章,包括使用Locbaml本地化WPF应用程序(https://www.codeproject.com/KB/WPF/Article.aspx),其中介绍了对XAML文件进行本地化的不同方法,每种方法都有各自的优缺点。
程序你好
2018/07/23
2K0
WPF 多线程 UI:设计一个异步加载 UI 的容器
2018-09-08 12:53
walterlv
2018/09/18
4.1K0
WPF 多线程 UI:设计一个异步加载 UI 的容器
WPF 数据绑定实例一
原理:监听事件机制,界面改变有TextChanged之类的事件,所以改变界面可以同步修改到对象
zls365
2021/02/26
8650
C# WPF MVVM项目实战(进阶①)
这篇文章还是在之前用Caliburn.Micro搭建好的框架上继续做的开发,今天主要是增加了一个用户窗体TestFormView,然后通过TabControl,将新增的窗体加载到主界面上进行分页显示,新增的页面引用了
zls365
2021/10/19
2K0
X--名称空间详解
X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的、用来引导XAML代码将XAML代码编译为CLR代码。
莫问今朝
2018/08/31
1.5K0
X--名称空间详解
让你编写的控件库在 XAML 中有一个统一的漂亮的命名空间(xmlns)和命名空间前缀
发布于 2018-05-22 13:21 更新于 2018-09-01 00:04
walterlv
2018/09/18
2.4K0
dotnet 读 WPF 源代码笔记 为什么自定义的 UserControl 用户控件不能跨程序集继承
从设计上,用户控件 UserControl 就不是一个合适用来多次继承的类型,更不要说进行跨程序集继承自定义的 UserControl 用户控件。对于大部分的用户控件来说,都是采用组合现有的控件来实现的功能,本身应该被当成一个模块来进行使用。在 WPF 框架里面,从框架层阻止了开发者对自定义的 UserControl 用户控件跨程序集继承的逻辑,一旦尝试进行跨程序集继承,将在运行时抛出异常。本文将从源代码的角度告诉大家 WPF 框架是如何阻止跨程序集继承
林德熙
2022/08/12
9950
2019-7-24-为啥在Code Behind进行RelativeSource的binding会丢失
不知道是不是有小伙伴遇到过这样的情况。当我们尝试将一个RelativeSource从xaml转到code behind时,原本好好的binding表达式居然出现binding错误。
黄腾霄
2020/06/10
6530
Silverlight:Dependency Property(依赖属性)学习笔记
学习SL/WPF,Dependency Properties(依赖属性)是一个全新(陌生)但又无法回避的概念。 http://www.wpftutorial.net/DependencyPropert
菩提树下的杨过
2018/01/23
6940
Silverlight:Dependency Property(依赖属性)学习笔记
WPF使用Winform自定义控件
说明:<wfi:WindowsFormsHost></wfi:WindowsFormsHost>即为WinForm控件的宿主容器,每一个宿主容器只能放一个WinForm控件,如下例,放了三个WinForm控件,分别放在三个宿主容器里面,该容器可以设置属性来调整大小和布局
用户7053485
2020/03/12
1.5K0
点击加载更多

相似问题

WPF中可重用Listview的Usercontrol

11

与FixedPage实例相同的WPF UserControl

12

WPF UserControl不呈现。UserControl是使用DataTemplates实例化的

23

WPF UserControl:集合绑定到所有实例?

12

WPF UserControl如何继承WPF UserControl?

5110
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档