在GDI +中有一个首选的,快速的用户控件滚动方法吗?
我创建了一个控件,以图形方式呈现水平可滚动的数据图.
目前,我的控件通过将水平滚动条的位置转换为数据的偏移来进行操作.然后,控件呈现基于控件宽度计算的该起点和终点之间存在的数据.
这种方法有效,但速度很慢.我不希望在每次滚动事件时手动重绘整个控制界面.相反,我想通过将图形数据的整体(或部分)绘制到屏幕外表面来初始化控件,然后通过使控件表面从偏移处开始读取预渲染图形数据来虚拟滚动控件表面.由水平滚动条的位置计算.
BitBlt是唯一的方法吗?我是否真的必须手动将图形数据从一个表面复制到另一个表面?我不能只接管Paint事件并使其在渲染时从屏幕外表面读取数据吗?这样,复制和渲染操作就是同一个.
或者,我应该直接向Panel控件执行某些操作,然后直接从左到右滚动面板本身?
澄清:基本上,我想知道滚动预渲染数据的正确方法.如何在控件中滚动图形数据?重绘预渲染图形不是正确的选择.
我有一个UserControl并想在设计时隐藏调整大小句柄,就像TextBoxControl一样,它只有两个句柄(左右两个)...文本框的高度是固定的,除非你说它是多行的.在这种情况下,文本框显示所有九个调整大小句柄.
我有一个C#/ ASP.NET .aspx页面,它声明了两个控件,每个控件代表一个选项卡的内容.我想要一个查询字符串参数(例如,?tab = 1)来确定激活两个控件中的哪一个.我的问题是,它们都经历了初始化事件并填充了它们的子控件,浪费了CPU资源并减慢了响应时间.是否有可能以某种方式停用它们以便它们不进行任何初始化?
我的.aspx页面如下所示:
<% if (TabId == 0)
{ %>
<my:usercontroltabone id="ctrl1" runat="server" />
<% }
else if (TabId == 1)
{ %>
<my:usercontroltabtwo id="ctrl2" runat="server" />
<% } %>
Run Code Online (Sandbox Code Playgroud)
那部分工作正常.我假设<%'意味着控件实际上不会被声明,所以不会初始化,但事实并非如此......
我知道有这个线程:如何从WPF中的DataTemplateSelector类中找到UserControl中的资源?
问同样的问题.
但是......我对答案不满意!必须有一种方法来获取资源
包含ContentControl/Presenter的UserControl声明:
ContentTemplateSelector="{StaticResource MySelector}"
Run Code Online (Sandbox Code Playgroud)
每个派生DataTemplateSelector
类在其SelectedTemplate
Method =>中都有一个参数
容器,它是DependencyObject的类型.
好的容器在我的情况下是contentcontrol.
是不是可以从"contentcontrol"开始爬上可视树并尝试通过FindAncestor获取UserControl?
我有一个WPF UserControls库和一个在库中共享的ResourceDictionary.
此库中的所有UserControl仅出现在单个"shell"父控件中,该控件实际上只是一组较小控件的容器.当我添加以下XAML时,我能够按预期从我的shell控件访问ResourceDictionary
<Control.Resources>
<ResourceDictionary Source="MyResources.xaml" />
</Control.Resources>
Run Code Online (Sandbox Code Playgroud)
但是,我无法从位于"shell"控件内的子控件访问ResourceDictionary.
我的印象是WPF应该在本地检查资源,然后向上遍历,直到找到适当的资源?
相反,我得到了
Cannot find resource named '{BoolInverterConverter}'.
Resource names are case sensitive. Error at
object 'System.Windows.Data.Binding' in markup file...
Run Code Online (Sandbox Code Playgroud)
显然,我可以(并且)在我的子控件中引用ResourceDictionary; 但现在每个控件都需要引用这个字典,我相信这不是必需的.
任何想法,我做的事情是奇怪的还是我对行为的期望不正确?
我正在使用ASP.NET 3.5 C#
我已经看到了很多这样的问题,但实际上并没有遇到任何有关答案的文章(也许只是我的研究不幸!).
基本上我想在页面上说3个链接(或按钮),这反过来会使用AJAX动态地将特定用户控件加载到更新面板中.
然后我希望加载的usercontrol能够在更新面板中处理回发(基本上没有页面刷新)来执行其处理和返回输出.
这可能吗?
有没有人对文章/博客有任何指示?
我见过很多,但没有一个涉及从用户控件处理回发或处理更新面板中的回发.
我甚至可能在这里有错误的结束.
任何提示都很棒,让我开始:)
干杯!
我正在构建现有ASP.NET用户控件中的一些自定义JavaScript功能.usercontrol需要知道它嵌入的控件的属性.所以,我最终选择使用expando属性而不是像这样的全局javascript变量:
Page.ClientScript.RegisterExpandoAttribute(Me.ClientID, "validatorsenabled", Me.ValidatorsEnabled)
Run Code Online (Sandbox Code Playgroud)
但是,尽管expando正确地输出到客户端,但usercontrol本身在HTML中没有相应的元素.因此,ASP.NET自动生成的以下JavaScript会出现"object is null"错误:
var ctl00_MainContentHolder_Payment_CreditCardInput1 = document.all ? document.all["ctl00_MainContentHolder_Payment_CreditCardInput1"] : document.getElementById("ctl00_MainContentHolder_Payment_CreditCardInput1");
ctl00_MainContentHolder_Payment_CreditCardInput1.validatorsenabled = "False";
Run Code Online (Sandbox Code Playgroud)
我做了一些调查,发现这个页面表明实现IWebPart接口可能会这样做,但我试着没有运气.
有没有办法让usercontrol输出像服务器控件这样的标签?或者是将整个事物转换为服务器控件的唯一选择(在这种情况下,这违背了网站设计的范畴)?
如果有人有任何其他想法,我愿意接受在用户控件中声明共享JavaScript属性的其他建议.
我有一个用户控件,我想在其他项目中使用它.当我直接为其属性设置一些值时没有问题:
<local:MyUserControl prop1="val1" prop2="val2">
...
</local:MyUserControl>
Run Code Online (Sandbox Code Playgroud)
但我无法应用它的风格.我试过了:
<Window ...>
<Window.Resources>
<Style x:Key="MyUserControlStyle" TargetType="{x:Type local:MyUserControl}">
<Setter Property="prop1" Value="val1"/>
<Setter Property="prop2" Value="val2"/>
</Style>
</Window.Resources>
<Grid>
<local:MyUserControl Style="{StaticResource ResourceKey=MyUserControlStyle}">
...
</local:MyUserControl>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
我哪里错了?-谢谢
无论如何通过前端标签将对象传递给usercontrol?我尝试了以下但它不起作用.
后端
public Range Range { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
// Popular channel range
Range Range = new Range()
{
Min = 0,
Max = 8
};
}
Run Code Online (Sandbox Code Playgroud)
前端
<uc:PopularItems Range="<%=Range %>" runat="server" />
Run Code Online (Sandbox Code Playgroud) 我正在我们的应用程序中的特定网格中加载用户控件,并且我正在向控件的Loaded
事件处理程序中的加载用户控件添加动画.
一些用户控件是轻量级的,其中一些在加载之前需要大量计算.问题是,当我向重度用户控件添加1秒动画时,然后显示控件,以便永远不会看到动画!
是否有任何其他事件我可以将我的动画添加到用户控件中,以便使用相同的动画显示重的和轻的动画?
在显示控件之前我需要一个事件.OnLoaded
不幸的是,对我来说似乎不是正确的地方.
user-controls ×10
asp.net ×4
c# ×4
wpf ×4
.net ×2
ajax ×1
coding-style ×1
expando ×1
gdi+ ×1
javascript ×1
onload ×1
postback ×1
resources ×1
scroll ×1
updatepanel ×1
webforms ×1
winforms ×1
xaml ×1