我需要找到一种声明方式(不在代码隐藏文件中)将ASP.Net网页中的属性值传递给用户控件的方法.以下是我正在尝试做的一个简单示例,但我无法让它工作.这是我正在创建用户控件对象的aspx页面的标记:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Src="~/MyUserControl.ascx" TagName="MyUserControl" TagPrefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<uc1:MyUserControl ID="MyUserControl1" runat="server"
UserControlProperty = '<%# Bind("PageProperty") %>' />
</div>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是aspx页面背后的代码(aspx.cs):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
public int PageProperty { get; set; }
protected void Page_Load(object sender, EventArgs e)
{ …
Run Code Online (Sandbox Code Playgroud) 我正在将1.1项目转换为2.0,并且遇到了一些用户控件的问题.
在原始项目中,有一个类库项目和网站项目.在类库项目中,有一个名为UserControls的文件夹,其中有几个ascx文件及其后面的文件代码.
我想保持相同的结构,所以我将这些用户控件引入我的新解决方案中的单独的类库项目中.我将它从完整类更改为部分类,并将CodeBehind更改为页面的CodeFile.
在旧用户控件中,User控件中的所有Web控件都列出如下
protected System.Web.UI.WebControls.DropDownList _findModeList;
Run Code Online (Sandbox Code Playgroud)
等等
我认为它是.net 2并且使用CodeFile属性,我可能不需要这样做但是当我省略它时它不会编译.
但是,当我包含它时,它会编译,但我得到"对象引用未设置为对象的实例".尝试在代码文件中使用_findModeList时出错.
是否可以将用户控件放在.net 2.0中的类库中?
我正在构建一个小的选项卡式c#表单,我希望每个标签页都有一些共同的功能,特别是一个OK按钮和一个错误消息,并为特定的表单字段留出空间.
有没有其他人做过类似的事情,你是如何做到的?
我们正在使用Microsoft Unity和依赖注入,因此我们为usercontrol提供了参数化构造函数.如何使用XAML将此依赖项注入usercontrol?
我在XAML中添加了usercontrol,如下所示.
xmlns:usrRefundArrivalProcessor="Ttl.Refunds.Wpf.Dashboad.Application.Usercontrols;assembly=Ttl.Refunds.Wpf.Dashboad.Application"
Run Code Online (Sandbox Code Playgroud) 我正在创建一个简单的用户控件; 只是一个ImageButton.
我已经成功将图像绑定到按钮,所以我决定添加一个工具提示.现在我遇到了麻烦.似乎我可以在XAML中为控件硬编码工具提示的文本,但是当它绑定时它返回一个空字符串.
这是我控制的XAML:
<Button x:Class="BCOCB.DACMS.Controls.ImageButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Name="this"
Style="{StaticResource DisabledButton}">
<Image Source="{Binding ElementName=this, Path=Source}" />
<Button.ToolTip>
<TextBlock Text="{Binding ElementName=this, Path=ToolTipText}" />
</Button.ToolTip>
</Button>
Run Code Online (Sandbox Code Playgroud)
这是工具提示文本的依赖属性信息:
public static readonly DependencyProperty ToolTipTextProperty = DependencyProperty.Register("ToolTipText", typeof(string), typeof(ImageButton));
public string ToolTipText
{
get
{
return this.GetValue(ToolTipTextProperty) as string;
}
set
{
this.SetValue(ToolTipTextProperty, value);
}
}
Run Code Online (Sandbox Code Playgroud)
最后,在我的窗口中声明控件:
<controls:ImageButton x:Name="btnAdd" Source="/DACMS;component/Resources/plus.png" ToolTipText="Add New Item" Click="btnAdd_Click" />
Run Code Online (Sandbox Code Playgroud)
正如我之前提到的,图像绑定得很好,我以完全相同的方式完成了它.
有任何想法吗?
谢谢,
桑尼
编辑:我现在有工作.我已经从绑定中删除了ElementName,并DataContext = this
在instanciation后面的代码中设置了TextBlock .不过,我想知道如何在XAML中解决这个问题.
FocusLost事件正在正确处理WPF的组件对于用户控件它是不同的:
如果单击或聚焦用户控件中的任何控件,则会立即触发User-Control的FocusLost!我怎么能阻止它呢?
我无法解决这个问题:(
如果我在ASP.NET页面中注册用户控件,控件是否会加载到页面?
<%@ Register Src=".." TagName="tag" TagPrefix="pre" %>
即使我没有在页面中使用它来调用它?
<pre:tag id='control123' />
因为即使我没有调用控件,我的部分代码也会被执行,我发现当我进行性能分析时.
我有一个asp.net 4.0的网站,有10个页面和12个用户控件.
现在我想在asp.net MVC 4.0中迁移这个站点; 因此,我可以重新使用这些用户控件(在传统的asp.net中存在)并使用它们进行渲染<%= Html.RenderUserControl() %>
.
简而言之,我的问题是我们是否可以在asp.mvc 4中使用asp.net的用户控件?
非常感谢,
JIgar
asp.net asp.net-mvc user-controls webusercontrol asp.net-mvc-4
我正在尝试编写一个俄罗斯方块克隆,在做了一些研究后,我遇到了一个使用小用户控件来构成块的示例以及包含网格的更大的用户控件.
我写的所有内容似乎都工作得很好(块正在生成并放置在网格上,如果我更改代码,我甚至可以将它们放在其他地方),但我似乎无法在块中移动块程序正在运行.我使用的示例通过更改control.left
每个块的属性来实现此目的.我试过这个,调试它,当属性改变时,块不移动.
我现在已经四处搜索了大约4个小时.我是一名新手程序员,所以我知道它可能是愚蠢的,但我无法找到它是什么.
这是我写的方法:
//Class TetrisGame.cs
public void MoveRight()
{
blok.MoveBlock("x", 1);
}
//Class Shape.cs
public void MoveBlock(string pos, int Amount)
{
if (pos == "x")
{
for (int i = 0; i < this.Shape().Count; i++)
{
((Blokje)this.Shape()[i]).MoveSide(1);
}
}
if (pos == "y")
{
for (int i = 0; i < this.Shape().Count; i++)
{
((Blokje)this.Shape()[i]).MoveDown(1);
}
}
//And, the code that should actually move the block in Block.cs:
public void MoveSide(int Step)
{
this.Left += (Step * …
Run Code Online (Sandbox Code Playgroud) 如果你这样做:
Edit1.Text := StringOfChar('X', 37440);
Run Code Online (Sandbox Code Playgroud)
它会显示文本,但是如果你这样做:
Edit1.Text := StringOfChar('X', 37441);
Run Code Online (Sandbox Code Playgroud)
文本不会出现.
有人知道为什么吗?
如果这是一个错误,还有另一种方法可以调整而不是将所有现有组件替换为TMemo吗?
为什么选择37440?