@ Control各属性说明(官网)

本文档详细阐述了在ASP.NET中,针对用户控件(.ascx文件)的解析器和编译器所使用的特定属性。这些属性对理解和操作用户控件的编译过程至关重要。

定义 ASP.NET 页分析器和编译器使用的特定于用户控件(.ascx 文件)的属性。此指令只能用于 ASP.NET 用户控件(其源代码包含在 .ascx 文件中)。

<%@ Control attribute="value" [attribute="value" ... ] %>
属性属性
AutoEventWireup

指示控件的事件是否自动匹配 (Autowire)。如果启用事件自动匹配,则为 true;否则为 false。默认值为 true。有关更多信息,请参见

ClassName

一个字符串,用于指定需在请求时进行动态编译的控件的类名。此值可以是任何有效的类名,并且可以包括类的完整命名空间(一个完全限定的类名)。如果没有为此属性指定值,已编译控件的类名将基于该控件的文件名。

通过使用

@ Reference 指令,另一个页或控件可以引用分配给该控件的类名。
CodeBehind

指定包含与控件关联的类的已编译文件的名称。该属性不能在运行时使用。

Note注意

包含此属性是为了与 ASP.NET 早期版本兼容,以实现代码隐藏功能。在 ASP.NET 2.0 版中,应当改用 CodeFile 属性指定源文件的名称,并用 Inherits 属性指定类的完全限定名。

CodeFile

指定所引用的控件代码隐藏文件的路径。此属性与 Inherits 属性一起使用,将代码隐藏源文件与用户控件相关联。该属性只对已编译控件有效。

CodeFileBaseClass

指定控件基类及其相关联的代码隐藏类的路径。此属性是可选的,但是使用该属性时,CodeFile 属性必须同时存在。可在实现共享方案时使用此属性,在共享方案下,您可在基类中定义公共字段(并可选择定义相关联的事件),以便引用在用户控件中声明的控件。根据 ASP.NET 代码生成模型,如果您没有使用此属性而在基类中定义了字段,则在编译时会为用户控件中声明的控件生成新的成员定义(在另一个分部类存根 (stub) 内),而您所需的方案将无法工作。但是,如果您使用 CodeFileBaseClass 属性将基类与用户控件相关联,并且让您的分部类(其名称分配给 Inherits 属性,其源文件由 CodeFile 属性引用)从基类继承,则基类中的字段在代码生成后将能够引用用户控件中的控件。

CompilationMode

使用一个指定几个枚举选项之一的字符串来设置是否编译控件。默认值为 Always,因此默认情况下编译 .aspx 控件。有关详细信息,请参见 CompilationMode 枚举。

CompilerOptions

包含用于编译控件的编译器选项的字符串。在 C# 和 Visual Basic 中,这是编译器命令行开关的序列。有关编译器选项的更多信息,请参见 C# 编译器选项Visual Basic 编译器

Debug

指示是否应使用调试符号编译控件。如果应使用调试符号编译控件,则为 true;否则为 false。由于此设置将影响性能,因此应该只在开发期间将该属性设置为 true

Description

提供控件的文本说明。ASP.NET 分析器忽略该值。

EnableTheming

指示控件上是否使用主题。如果使用主题,则为 true;否则为 false。默认值为 true

EnableViewState

指示是否跨控件请求维护视图状态。如果维护视图状态,则为 true;否则为 false。默认值为 true

Explicit

确定是否使用 Visual Basic Option Explicit 模式来编译控件。如果启用了 Visual Basic 显式编译选项,且所有变量必须使用 DimPrivatePublicReDim 语句来声明,则为 true;否则为 false。默认值为 false

Note注意

除了 Visual Basic,所有其他语言都忽略此属性。此外,此选项在 Machine.config 配置文件中设置为 true。有关更多信息,请参见计算机配置文件

Inherits

定义供控件继承的代码隐藏类。它可以是从 UserControl 类派生的任何类。与包含代码隐藏类源文件的路径的 CodeFile 属性一起使用。有关代码隐藏类的更多信息,请参见 ASP.NET 网页代码模型

Language

指定在编译控件中所有内联呈现(<% %> 和 <%= %>)和代码声明块时使用的语言。值可以表示任何 .NET Framework 支持的语言,包括 Visual Basic、C# 或 JScript。对于每个控件,只能使用和指定一种语言。

LinePragmas

确定运行库是否应在源代码中生成行杂注。这些是调试工具常用来标记源文件中的特定位置的编译器选项。如果应生成行杂注,则为 true;否则为 false

Src

指定包含链接到控件的代码的源文件的路径。在所链接的源文件中,您可选择在类中或在代码声明块中包括控件的编程逻辑。

可以使用 Src 属性将生成提供程序链接到控件。有关更多信息,请参见 BuildProvider 类。另外,在 ASP.NET 2.0 之前的版本中,Src 属性用作将代码隐藏文件链接到控件的一种备选方法。在 ASP.NET 2.0 版中,将代码隐藏源文件链接到控件的首选方法是使用 Inherits 属性指定一个类,并使用 CodeFile 属性指定该类的源文件的路径。

Strict

指示是否应使用 Visual Basic OptionStrict 模式来编译控件。如果启用了 Option Strict 则为 true;否则为 false。默认值为 false

Note注意

除了 Visual Basic,所有其他语言都忽略此属性。

TargetSchema

指定用来验证控件上的内容的架构的名称。这只用于描述性目的;并不执行实际的验证,分析器将忽略该属性。

WarningLevel

指示您想要编译器在哪个编译器警告等级将警告作为错误来处理,并中止控件编译。警告等级可以是 0 到 4。有关更多信息,请参见 WarningLevel 属性。

ASP.NET Web 服务器控件事件模型
 
<think>我们正在讨论Avalonia框架中如何绑定UserControl的宽度属性。根据用户的问题,他想要在Avalonia中实现UserControl宽度的绑定功能。首先,在Avalonia中,UserControl是一个内容控件,它有一个Width属性,这个属性是可以绑定的。绑定可以通过多种方式实现,例如在XAML中使用Binding标记,或者在代码中设置绑定。由于用户提到了“UserControl宽度的绑定”,我理解他可能是希望将UserControl的Width属性绑定到某个数据源,或者希望绑定UserControl内部的某个元素的宽度。在Avalonia中,绑定通常使用{Binding}扩展标记。对于UserControl自身的宽度绑定,可以在XAML中直接设置,例如:```xaml<UserControlWidth="{BindingDesiredWidth}"...>```这里的`DesiredWidth`应该是绑定上下文(DataContext)中的一个属性。但是,用户可能是在UserControl内部需要绑定。例如,他可能希望将UserControl内部的某个控件的宽度绑定到UserControl的宽度,或者绑定到数据上下文中的某个属性。这里有两种常见情况:1.绑定UserControl的宽度到数据上下文:在UserControl的XAML中,可以直接在根元素上设置Width绑定:```xaml<UserControlxmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"d:DesignWidth="800"d:DesignHeight="450"x:Class="YourNamespace.YourUserControl"Width="{BindingYourWidthProperty}"><!--...--></UserControl>```2.在UserControl内部,绑定子控件的宽度到UserControl的宽度:这时,我们可以使用相对源绑定(RelativeSource)来绑定到UserControl本身。例如:```xaml<UserControl...><GridWidth="{BindingWidth,RelativeSource={RelativeSourceAncestorType=UserControl}}"><!--...--></Grid></UserControl>```或者,也可以使用ElementName绑定,但是需要给UserControl命名:```xaml<UserControlx:Name="root"...><GridWidth="{BindingWidth,ElementName=root}"><!--...--></Grid></UserControl>```另外,用户可能希望将UserControl的宽度绑定到父容器的宽度。这时,可以在使用UserControl的地方,由外部容器控制宽度,例如:```xaml<Grid><local:YourUserControlWidth="{BindingActualWidth,RelativeSource={RelativeSourceAncestorType=Grid}}"/></Grid>```注意:在Avalonia中,绑定到父容器的宽度时,通常使用`ActualWidth`,因为`Width`可能为NaN(表示自动大小),而`ActualWidth`是实际渲染的宽度。关于在UserControl内部绑定到自身(UserControl)的宽度,上面已经给出了例子。如果用户的需求是让UserControl的宽度由内容决定,但又想绑定到某个数据属性,这可能会产生冲突。因为宽度绑定会覆盖UserControl的内容尺寸。因此,需要根据具体的需求来确定如何绑定。最后,提醒一点:在Avalonia中,绑定是框架的核心功能,所以只要属性是AvaloniaProperty(包括所有继承自AvaloniaObject的属性),都可以进行绑定。根据用户的问题,他没有具体说明是绑定到数据上下文还是绑定到父容器,所以我们给出了多种可能的情况。现在,如果用户的问题是在UserControl内部将某个控件的宽度绑定到UserControl的宽度,那么使用RelativeSource绑定到祖先类型为UserControl是最常见的做法。我们下面将给出一个完整的例子。假设我们要创建一个UserControl,其中包含一个文本框,我们希望文本框的宽度与UserControl的宽度相同。UserControl的XAML可能如下:```xaml<UserControlxmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"x:Class="AvaloniaApp.MyUserControl"Width="200"Height="100"><!--这里可以设置固定宽高,也可以通过绑定设置--><TextBoxWidth="{BindingWidth,RelativeSource={RelativeSourceAncestorType=UserControl}}"Height="30"/></UserControl>```或者,如果希望UserControl的宽度由父容器决定,并且内部文本框宽度始终与UserControl一样宽,那么上面的绑定就能实现。另外,如果UserControl的宽度是在使用它的地方由外部数据绑定设置的,那么只需在UserControl的根元素设置Width绑定即可。总结一下:1.在UserControl的根元素设置Width绑定,将UserControl的宽度绑定到外部数据。2.在UserControl内部,使用RelativeSource绑定到UserControl自身的Width,以便内部控件能够根据UserControl的宽度调整。如果用户的问题是如何在代码中绑定,那么可以使用Avalonia的Binding对象,例如:```csharp//假设在UserControl的代码中this.Bind(UserControl.WidthProperty,newBinding("YourWidthProperty"));```但是,通常XAML绑定更推荐。根据上述引用内容,没有直接相关的问题,我们专注于Avalonia的绑定实现。§§相关问题§§1.Avalonia中如何绑定到父容器的宽度?2.在AvaloniaUserControl内部,如何将元素的宽度绑定到UserControl的宽度?3.如何避免绑定UserControl宽度时与内容宽度设置冲突?</think> 基于您的需求,在 Avalonia 中绑定 UserControl 宽度可以通过以下方式实现: ### 实现步骤 1. **声明绑定属性**: 在 UserControl 代码中创建可绑定的宽度属性: ```csharp // UserControl 代码文件(MyUserControl.axaml.cs) public partial class MyUserControl : UserControl { public static readonly StyledProperty<double> CustomWidthProperty = AvaloniaProperty.Register<MyUserControl, double>( nameof(CustomWidth), defaultValue: double.NaN); // NaN 表示使用默认宽度策略 public double CustomWidth { get => GetValue(CustomWidthProperty); set => SetValue(CustomWidthProperty, value); } } ``` 2. **在 XAML 中绑定**: 使用 `{Binding}` 将控件宽度绑定到 `CustomWidth` 属性: ```xml <!-- UserControl 布局文件(MyUserControl.axaml) --> <UserControl xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="{Binding CustomWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"> <!-- 内部内容 --> <Border Background="LightBlue" Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"> <TextBlock Text="宽度已绑定" HorizontalAlignment="Center"/> </Border> </UserControl> ``` 3. **外部使用绑定**: 在父容器中动态绑定 UserControl 宽度: ```xml <Window xmlns:local="clr-namespace:YourApp.Views" Width="500"> <StackPanel> <!-- 绑定到窗口宽度的80% --> <local:MyUserControl CustomWidth="{Binding $parent[Window].Width, Converter={x:Static Converters.MathMultiplier}, ConverterParameter=0.8}"/> <!-- 绑定到数据上下文属性 --> <local:MyUserControl CustomWidth="{Binding ViewModelWidthProperty}"/> </StackPanel> </Window> ``` ### 关键说明 1. **相对绑定**: ```xml Width="{Binding CustomWidth, RelativeSource={RelativeSource Self}}" ``` 使用 `RelativeSource Self` 绑定当前控件的自有属性 2. **实际宽度传递**: ```xml ActualWidth="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" ``` 内部控件可通过 `ActualWidth` 获取实时渲染宽度[^1] 3. **转换器示例**(百分比转换): ```csharp public class MathMultiplier : IValueConverter { public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { if (value is double baseValue && parameter is string factor) return baseValue * double.Parse(factor); return value; } } ``` ### 注意事项 - 使用 `double.NaN` 作为默认值保持自动尺寸计算 - 设计时宽度可通过 `d:CustomWidth="200"` 设置 - 复杂绑定建议使用 `BindingPriority` 避免布局循环
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值