UserControl是一个独立的可重用输入控件,允许用户与应用程序进行交互。用户控件可以是按钮,复选框,输入文本框,鼠标,键盘等。
我正在制作一个用于引用的 WPF 应用程序,在我的一个窗口(定义为用户控件,而不是窗口)中,我有一个打印按钮,它成功地将窗口渲染为位图,然后渲染为
如何设置故事板来为 Border.BorderBrush 的不透明度设置动画。我想创建一个仪表板控件,其中该控件被“脉冲”边框包围,即边框的不透明度...
我的 Gridview 无法分页或排序。我的意思是,当我尝试按列排序或尝试对 GridView 进行分页时,GridView 中的数据不会更改。 我把它放在 UpdatePan 里...
Prism MVVM WPF 如何将自定义 UserControl 按钮单击命令绑定到 UC 父视图模型
我有一个包含按钮、标签和文本框的自定义控件。此用户控件正在另一个具有 ViewModel 的视图中使用。我想从自定义 con 绑定点击事件处理程序...
如何将自定义 UserControl 按钮单击命令绑定到 UC 父视图模型
我有一个包含按钮、标签和文本框的自定义控件。此用户控件正在另一个具有 ViewModel 的视图中使用。我想从自定义控件中绑定点击事件处理程序...
Windows Forms 4.8 对话框模式可在 Visual Studio 2022 IDE 中使用,但通过 MSI 安装后无法使用
TL;博士 BindingSource.CurrentChanged 事件在 IDE 调试期间似乎可以正常触发,但在最终安装的“发布”编译的应用程序中则不然 - 其他事件处理程序似乎按预期运行。 果阿...
正则表达式逆序解析“^[-\wÀ-ÿ\'\.\-\&\s]+$”-[x-y]范围
带有 .Net Framework 4.6.2 的旧版 C# ASP.Net Web 表单应用程序 我在 ascx 用户控件中有一个 reg exp 验证器: 使用 .Net Framework 4.6.2 的旧版 C# ASP.Net Web 表单应用程序 我在 ascx 用户控件中有一个 reg exp 验证器: <asp:RegularExpressionValidator ID="REV_RecordId" runat="server" ControlToValidate="uxRecordID" ValidationGroup="TheValidationGroup" Display="Dynamic" ForeColor="Red" ErrorMessage="Please enter a valid ID" SetFocusOnError="True" ValidationExpression="^[-\wÀ-ÿ\'\.\-\&\s]+$" /> 但是当这个控件加载时 UserControl ctrl = (UserControl)LoadControl("path to user control"); 我得到了例外: 内部异常1: ArgumentException:以相反顺序解析“^[-\wå-¿'.-&\s]+$” - [x-y] 范围。 但是任何正则表达式验证器都会说“^[-\wÀ-ÿ'.-&\s]+$”是有效的,较高的字符组件表示“匹配 À(索引 192)和 ÿ(索引)之间的单个字符255)(区分大小写)“ 那么为什么这会因为显示更奇怪的角色解释而失败呢? 您可以对 Unicode 字符使用另一种表示法: ValidationExpression="^[\-\w\u00C0-\u00FF'.&\s]+$" 其中 À 表示为 \u00C0,ÿ 表示为 \u00FF。
在这个私人项目开发的某个时刻,一些用户控件从设计器中消失了。它们在执行项目时仍然可见,因为它们已被声明、初始化并且
如何在整个用户控件内而不是仅在内部元素上捕获 PointerPressed 事件? Windows 应用程序
我有一个用户控件,我希望捕获其上的 PointerPressed 事件。 只需捕获用户控件本身的事件,如下所示: 我有一个用户控件,我希望捕获其上的 PointerPressed 事件。 只需捕获用户控件本身的事件,如下所示: <UserControl ... PointerPressed="UserControl_PointerPressed" > 仅在鼠标单击控件内的元素时调用事件。 该控件由边框勾勒出轮廓,我希望在内部单击时调用该事件,但在边框内的大部分空白区域上,该事件不会发生。 有办法做到这一点吗? 将相关边框的背景设置为透明就可以了
如何防止 WM_KEYDOWN 处理的按键出现 WM_CHAR?
我编写了一个自定义 Windows 控件,用于处理文本输入的 WM_CHAR 消息和用于“导航”按键(如箭头、Delete、Home 等键)的 WM_KEYDOWN 消息。 我...
.NET 8 上的 Winforms:为什么选项卡索引不能与用户控件一起使用?
我正在 .NET 8.0 中使用 Winforms。我创建了许多用户控件,除了选项卡索引之外,它们在各方面都运行良好。 我尝试在表单级别设置选项卡索引,然后在...
将焦点设置在 UserControl 中的 TextBox 上
在我的程序中,我有一个用户控件,它使用内容演示器在窗口上显示数据。我想简单地将光标焦点设置在启动时窗口中的某个文本框中。 通常我...
我真的需要更多关于造成这种情况的想法,目前它让我陷入困境。 我有一个 Xaml 用户控件,其中包含另一个用户控件,如下所示: 我真的需要更多关于造成这种情况的想法,目前它让我陷入困境。 我有一个 Xaml 用户控件,其中包含另一个用户控件,如下所示: <UserControl x:Class="MyModule.View.MainView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:igDock="http://infragistics.com/DockManager" xmlns:views="clr-namespace:MyModule.View" > <StackPanel x:Name="panel"> <views:MyHeaderView/> <igDock:XamDockManager x:Name="dockingManager"/> </StackPanel> </UserControl> 这是在 Prism 模块内(因此是 MyModule 名称),但除此之外我不认为这有什么特别不寻常的地方。 现在,只要我向标题视图添加名称,代码就无法编译,例如 <views:MyHeaderView x:Name="header"/> 我得到的错误很简单: "The type name 'View' does not exist in the type MyModule.MyModule'" 我尝试将包含的用户控件移动到另一个命名空间中,创建一个空白用户控件并尝试使用它(相同的结果)并删除 XamDockManager,但似乎没有任何区别。 有人能解释一下吗? 我想我找到了答案。 如果我将模块类重命名为 MyModuleThingy,则它可以编译。似乎出现问题是因为模块类与包含它的命名空间具有相同的名称(MyModule.MyModule)。 如果有人能让我知道为什么这可能是一个问题,我很想知道。特别是因为我继承了很多代码,这似乎是 Prism 的特定实现中的常见模式。 问题是您有一个同名的类和命名空间。如果你有类似的东西: namespace MyModule { public class MyModule { } public class MyView { } public class MyControl { public void Foo() { MyModule.MyView v = ..; } } } v之前的类型会认为MyView是在MyModule类型中作为嵌套类型。它不会将 MyModule 解析为命名空间,因为该类型基于 C# 的类型解析规则而获胜。 背后生成的代码只是采用您在 xmlns 中定义的命名空间,并在创建支持字段时将其添加到前面(由于 x:Name 属性)。所以你最终得到 MyModule.View.MyHeaderView,其中 MyModule 被解释为类型,而不是命名空间。 我很不幸地把我的项目称为 TextEditor,显然这个名称与现有的 MS 类冲突。我尝试将 x.Name 或 Name 属性添加到对用户控件的引用时出现编译错误,抱怨编译器找不到我的用户控件。 显然它正在研究 MS 课程,而不是本地项目。 我将项目重命名为 TextEditorProject,必须使用 Grep 来查找所有出现的情况,但最终,我让它工作了。 你是否有一个名为“View”的类,与命名空间相同? WPF 不喜欢您使用 x:Name 作为程序集中定义的控件,假设 xmlns:views="clr-namespace:MyModule.View" 与您的程序集相同 用名字代替,就可以了
为什么我们实际上需要用户控件? 窗户: 为什么我们实际上需要用户控件? 窗户: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wpfApplication1="clr-namespace:WpfApplication1"> <wpfApplication1:SaveCloseUserControl /> </Window> 用户控制: <UserControl x:Class="WpfApplication1.SaveCloseUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <StackPanel Orientation="Horizontal"> <Button Height="30" Content="Save" /> <Button Height="30" Margin="1" Content="Cancel" /> </StackPanel> </UserControl> 背后代码: public partial class SaveCloseUserControl : UserControl { public SaveCloseUserControl() { InitializeComponent(); } } 我不明白为什么我应该将 StackPanel(或任何其他控件)包装在 UserControl 中,如果没有 UserControl 的以下代码将执行完全相同的操作。 窗户: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wpfApplication1="clr-namespace:WpfApplication1"> <wpfApplication1:SaveCloseStackPanel /> </Window> 无需用户控制的堆栈面板: <StackPanel x:Class="WpfApplication1.SaveCloseUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Orientation="Horizontal"> <Button Height="30" Content="Save" /> <Button Height="30" Margin="1" Content="Cancel" /> </StackPanel> 背后代码: public partial class SaveCloseUserControl : StackPanel { public SaveCloseUserControl() { InitializeComponent(); } } 我一直在到处使用 UserControls,但现在当我想到它时,除了将项目包装在其中之外,它们没有做任何事情。因此,我在 10 个不同的视图上进行了尝试,无论它是什么,我都可以用其他项目(Grid、ComboBox、GroupBox 等)替换 UserControl,并且它们的工作方式完全相同。因此,需要明确的是,如果我有一个用户控件,并且其中的第一个元素是 ComboBox,那么我会删除 UserControl 并将 ComboBox 放在其位置上。然后里面的所有内容都保持原样,就像上面的 StackPanel 示例一样。 为什么我还要为 UserControl 烦恼,如果它不做任何事情,还要创建和渲染另一个项目? UserControl的目的是将一组控件分组到一个可重用的组件中。它们不能被设计样式或模板化。 Custom Control的目的是扩展现有控件,或创建全新的控件。这些,与 UserControl can 不同,可以进行样式化和模板化。 我认为你把两者混淆了。 所以,您可能想知道,“我什么时候应该使用 UserControl,什么时候应该使用 Custom Control?”,答案是视情况而定。 当您需要创建一组逻辑控件,这些控件以某种方式交互以创建几乎“复合”控件时,您应该使用 UserControl。当您想要向现有控件添加功能时,应该使用Custom Control。 在您的示例中,最好的方法是使用 UserControl,因为您的 StackPanel 是制作成一个可重用组件的一组控件。 您可以在这里和这里了解更多信息。 UserControl的目的是帮助您构建可重用的UI组件,这些组件可以像内置控件一样添加到您的工具箱中,从零开始。 这里的前缀“User”有点意思是“不是来自 WPF 团队”。 WPF 不提供任何派生自 UserControl 的类。 UserControls 的一个非常重要的方面是您可以使用 XAML 设计它们(因此它们可以是复合的),并将代码 + XAML 打包在一起,可能在一个“库”程序集中,您可以在没有源的情况下发布该程序集。 现在,你的例子非常贫乏(无意冒犯:-),它们没有做任何有趣的事情,以至于我很想让它们真正可重用。大多数时候,在意识到您多次重复相同的 XAML 模式(可能有一些变化)之后,您将根据使用情况(或经验)构建 UserControl。 例如在这个开源项目(Github for Visual Studio)中:https://github.com/github/VisualStudio/tree/master/src/GitHub.UI/Controls,你会看到他们编写了一些自定义的控件,如 EmojiImage(派生自 Image,不需要 XAML),以及一个 UserControl:HorizontalShadowDivider。为什么?因为 HorizontalShadowDivider 具有与其关联的 XAML,并且(可能)在多个地方使用。 我在一本书中读到过(抱歉忘记了书名...),UserControl 是一个“块盒”容器。 根据我对该术语的理解并使用您的示例作为基础,您可以看到 StackPanel 派生的一个受到 StackPanel 布局两个按钮(水平或垂直)的能力的限制。将来,如果此布局发生变化(也许是一个新要求?),您将需要创建一个新的面板派生类(或重写现有的派生类)并使用它,例如 DockPanel。这很糟糕。 在 UserControl 派生面板上,您所要做的就是将 StackPanel 更改为适合新要求的另一种面板类型。 这使得 UserControl 成为一个块框,恕我直言。 根据您的示例,如果您仅使用用户控件一次,那么它就没那么有用。 但在这种情况下,如果某个设计部分被使用了很多次,并且每次编写 xaml 代码或任何其他逻辑来创建相同的 UI 时,那么用户控件就会发挥作用。 你能用例子解释一下吗,它比这个例子好多了?
什么激励从 UserControl 而不是其他一些小部件继承?
Flet 文档为您指出的主要方向是在尝试制作自定义小部件/控件时使用 UserControls。 UserControl本身继承自Stack,还自带了一个build方法
在用户控件内的 ComboBox 上调用 SelectedIndexChanged
我正在使用 .NET 4 并尝试创建一个 CustomControl,但是当我将此 CustomControl 添加到我的 Windows 窗体中时,我希望能够访问我的用户继续中的 ComboBox 的 SelectedIndexChanged...
我有一个 CEdit 派生控件,当基础数据为空时,该控件显示字符串“N/A”。我最近添加了代码以在控件获得焦点时清空控件(SetWindowText(“”);)并将其设置为...
在我的aspx页面上我有一个div 在我的 aspx 页面后面的代码中,我像这样登录相关控件 uc = CType(Page.LoadCo... 在我的 aspx 页面上我有一个 div <div id="MatterRiskControl" runat="server" /> 在 aspx 页面后面的代码中,我像这样登录相关控件 uc = CType(Page.LoadControl("MatterRisk_Probate.ascx"), UserControl) MatterRiskControl.Controls.Add(uc) 尽管我有一个文本框,我想在后面的代码中设置文本,但效果很好。在我的 ascx 页面中,文本框设置如下 <dx:ASPxTextBox ID="MyTextBox" runat="server" /> 在ascx页面后面的页面加载代码中我已经尝试过这个 MyTextBox.Text = "Some Text Here" 但它没有设置它。 我不确定如何从后面的 aspx 代码引用 TextBox? 感谢您的帮助! 让我们假设一个 UC 带有大量控件(文本框、复选框),以及各种有趣的东西。 简短版: 公开UC的方法来更改你想要的文本框。 造成这种情况的原因有很多,但主要原因是您想要一个支持多个控件实例的设计。 暴露一些公共方法。 说这个 UC 来编辑酒店。 <h3>UC testing page</h3> Enter ID to show: <asp:TextBox ID="txtHotelID" runat="server"></asp:TextBox> <asp:Button ID="cmdShow" runat="server" Text="Show Hotel" CssClass="btn" OnClick="cmdShow_Click" /> <br /> <br /> <uc1:MyEditHotelC runat="server" ID="MyEditHotelC" /> <br /> <div style="clear:both"></div> <hr /> <h3>This page button(s)</h3> Enter new hotel text: <asp:TextBox ID="txtMyHotel" runat="server"> </asp:TextBox> <asp:Button ID="cmdChangeHotel" runat="server" Text="Change HotelName" OnClick="cmdChangeHotel_Click" /> </div> 我们有这个: 在加州大学,我们这样做: Public Sub ChangeHotel(strText As String) Me.txtHotel.Text = strText End Sub 注意上面,我们可以对后面表单上的文本框使用相同的控件名称,但是 txtBox 控件在渲染时将被 UC 更改。 当前页面代码: Protected Sub cmdChangeHotel_Click(sender As Object, e As EventArgs) MyEditHotelC.ChangeHotel(txtMyHotel.Text) End Sub 注意我们如何创建/使用/享受 UC 的公共方法,因此在当前页面上我们可以轻松抓取/获取/更改文本框控件。 如果您需要读取/使用文本框值,您可以制作一个 getter/setter。 上面可能会变成这样: Public Property tHotel Get Return txtHotel.Text End Get Set(value) txtHotel.Text = value End Set End Property 再一次,由于页面上可能存在 2 或 5 个控件副本,那么您要在此处更改文本框的哪个副本? 我可以像这样更新/更改页面上 2 个 UC 的酒店名称: <uc1:MyEditHotelC runat="server" ID="MyEditHotelC" /> <br /> <uc1:MyEditHotelC runat="server" ID="MyEditHotelC2" /> <br /> 现在更改两者酒店的代码如下: Protected Sub cmdChangeHotel_Click(sender As Object, e As EventArgs) MyEditHotelC.tHotel = txtMyHotel.Text MyEditHotelC2.tHotel = txtMyHotel.Text End Sub 如果您只需要获取值,则在后面的 UC 代码中创建一个公共函数。 但是,如果您需要获取和设置该文本框,请按照上面的方式公开公共属性,然后您可以更改文本。 更令人惊奇的是,这些值在标记中是有效的: 例如这个: <uc1:MyEditHotelC runat="server" ID="MyEditHotelC2" tHotel ="ABC" /> 就像带有一个文本框的 Gridview 一样?那么,当您有 10 行时,您正在处理文本框的哪个实例? UC 也是如此。如果页面上有 5 个文本框,您将获取、抓取然后更改哪个文本框? 保持文本酒店框的多个实例分离的唯一真正方法是公开公开每个控件的 getter 和 setter。 现在,您当然可以在客户端 JavaScript 中仍然获得控制权,并更改它,但就目前而言,这篇文章有点长,上面的内容应该有助于提供一些我认为效果很好的方法的好例子。
我基于 DataGrid 构建了一个 UserControl,以便添加我没有详细说明的过滤功能。它相当复杂,但效果很好(稍后我必须弄清楚如何删除大量隐藏代码)。 我...
我创建了一个 Google 表格,作为我志愿服务的非营利组织的时间表。 每张表都是每周的时间表。有权访问该链接的任何人都可以编辑该文档,因此