我们正在控制子类中进行自定义绘制OnRender.此绘图代码基于外部触发器和数据.因此,每当触发器触发时,我们都需要根据该数据重新呈现控件.我们要做的是找出如何强制控件重新渲染但不经过整个布局传递.
如上所述,我所看到的大多数答案都围绕着使Visual无效的布局无效,这会迫使新的测量并安排非常昂贵的通行证,特别是对于像我们这样非常复杂的视觉树.但同样,布局不会改变,VisualTree 也不会改变.唯一能做的就是外部数据的呈现方式不同.因此,这严格来说是纯粹的渲染问题.
同样,我们只是在寻找一种简单的方法来告诉控件它需要重新执行OnRender.我见过一个"黑客"在您创建一个新的DependencyProperty,并用你刚才设置的时候要刷新的控制一定的价值"AffectsRender"注册它,但我更感兴趣的是发生了什么事情的默认实现内那些属性:他们所谓的影响那种行为.
好了,它看起来像没有任何这样的呼叫,因为即使是AffectsRender国旗还是引起内部安排通(按照以下CodeNaked的答案),但我已经张贴,显示了内置行为,以及一个工作-第二个答案周围禁止你的布局传递代码从一个简单的可空大小作为标志运行.见下文.
在Delphi XE2中,我在一对设计/运行时包中有一个控件.最初,一切都很好.我已经多次建造了它们.突然间没有任何警告,设计时间包开始在我的一个单位抱怨Graphics我建造时单元缺失.Graphics是一个标准单位,但在这一个地方找不到.我甚至没有对这个单位做过任何改动,据我所知,任何可能影响这个的变化.
这里只是本单元顶部(界面)的用途:
uses
Graphics, ColorConv, Classes, Dialogs, ZLib;
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它是一个非常简单的单元,我只对这个项目进行了非常简单的更改.有什么可以让它开始抱怨这一点?
奇怪的是,如果我安装它,一切正常,它只是不构建.
有相当多的代码,我不想发布整个事情.
我需要创建一个带圆角的矩形气泡,里面有文字,就像卡通讲话泡泡一样.我需要气泡水平和垂直扩展,具体取决于它包含的文本的大小.我希望语音箭头和圆角的半径保持不变.
我可以简单地使用一个路径来创建我的气泡,但我不能调整气泡的大小并保持角半径和箭头不变......这是将调整大小的整个路径.
我很欣赏有人可以指出我正确的方向.
删除了死的ImageShack链接
这是卡通泡泡用户控件的最终版本.我在Jobi Joy的版本中添加了一个没有笔划的矩形来隐藏路径线的末尾,而不是试图让它与矩形齐平.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<Rectangle Fill="#FF686868" Stroke="#FF000000" RadiusX="10" RadiusY="10"/>
<Path Fill="#FF686868" Stretch="Fill" Stroke="#FF000000" HorizontalAlignment="Left" Margin="30,-5.597,0,-0.003" Width="25" Grid.Row="1" Data="M22.166642,154.45381 L29.999666,187.66699 40.791059,154.54395"/>
<Rectangle Fill="#FF686868" RadiusX="10" RadiusY="10" Margin="1"/>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="25" Text="Hello World" TextWrapping="Wrap"/>
</Grid>
Run Code Online (Sandbox Code Playgroud) 
我需要自定义信息窗口,上面有两个可点击按钮.当它更多然后标记并单击其中任何一个时,窗口应该打开,当点击另一个标记时,另一个窗口应该打开并关闭前一个窗口以及单击.是否有任何具体原因为什么谷歌地图v2不支持像按钮,复选框等实时组件?
继续我之前的问题,文本差异可视化的任何良好控制是什么?
像StackOverflow的修订差异查看器,但对于WinForms或WPF
要求:
没有应用程序,只有组件.
我对OSS差异工具不感兴趣
我正在尝试设计一个黑莓应用程序,我想知道是否有任何资源如何创建自定义用户界面元素,皮肤现有的和其他可能性?
我开发了一些带有自定义UI和东西的iPhone应用程序,所以不确定BB世界在UI开发方面提供了什么.
任何提示,建议或想法都会很棒.
我想在窗口表单的datagridview中显示每页10条记录,用户必须单击下一步按钮才能显示下10条记录.是否在DataGridview中有一些属性或者我是否需要创建自定义控件.
我需要做些什么来实现这一目标.
我正在尝试使用每行上的复选框创建一个组合框,以允许多次选择.作为用户控件或自定义控件,这会更好吗?
我之前没有创建过一个控件,只是在寻找一个关于我需要走向哪个方向的建议.
谢谢.
我正在寻找可以用作时间线控件的东西.一种"横幅",用户可以向左或向右拖动以及时前进或后退,然后他或她应该能够在该控件上选择一个时间点.
一个奇特的日期时间选择器:-)
有任何想法吗?
我没有在我的应用程序中附加PreviewKeyUp事件TextBox并检查按下的键是否为Enter键然后执行操作,而是决定实现TextBox包含DefaultAction事件的扩展版本,该事件在按下Enter键时触发TextBox.
我所做的基本上是创建一个新的类,从TextBox公共事件延伸DefaultAction,如下:
public class DefaultTextBoxControl:TextBox
{
public event EventHandler<EventArgs> DefaultAction = delegate { };
public DefaultTextBoxControl()
{
PreviewKeyUp += DefaultTextBoxControl_PreviewKeyUp;
}
void DefaultTextBoxControl_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key != Key.Enter)
{
return;
}
DefaultAction(this, EventArgs.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我使用我的应用程序中的这个自定义文本框,如(xaml):
<Controls:DefaultTextBoxControl DefaultAction="DefaultTextBoxControl_DefaultAction">
</Controls:DefaultTextBoxControl>
Run Code Online (Sandbox Code Playgroud)
现在,在我学习WPF的过程中,我已经意识到几乎大多数时候都有一种"更酷"(希望更容易)的方式来实现
...所以我的问题是,我怎样才能改善上述控制? 或者是否有另一种方法可以进行上述控制?...也许只使用声明性代码而不是声明性(xaml)和程序性(C#)?
custom-controls ×10
wpf ×5
c# ×3
.net ×2
android ×1
blackberry ×1
controls ×1
datagridview ×1
delphi ×1
delphi-xe2 ×1
diff ×1
google-maps ×1
invalidation ×1
onrender ×1
pagination ×1
redraw ×1
scope ×1
skin ×1
winforms ×1
xaml ×1