我有ItemsControl一个ScrollViewer.其中的项目ItemsControl扩展为DataTemplate基本上由a 组成的项目Adorner.
现在的问题是,当滚动时,视觉儿童在Adorner外面可见ScrollViewer.让我们说我从水平偏移0滚动到100,Adorner向左移动的视觉子项并且在旁边可见ScrollViewer,尽管它们应该被隐藏.设置ClipToBounds在ItemsControl或ScrollViewer不起作用.
我理解,这Adorner是在z顺序上呈现在所有元素之上,但它们确实不应该在诸如此类的情况下可见ScrollViewer.Element通过这种方式装饰的行为与预期的一样,并且不可见ScrollViewer.
是否有任何简单的方法来"剪辑" Adorners,以便它们仅在可见滚动区域中可见?
谢谢,Andrej
我将在.NET项目中使用Dictionary来存储大量对象.因此,我决定使用GUID字符串作为键,以确保每个对象的唯一键.
GUID(或更大的)之类的大键是否会降低Dictionary的性能,例如通过其键检索对象?
谢谢,Andrej
当尝试基于Silverlight设置对象时间/帧的动画时(与使用DoubleAnimation或Storyboard不同的东西,例如不适合快节奏的游戏),例如每帧在特定方向上移动宇宙飞船,运动是跳跃的,不太顺利.屏幕甚至似乎都在撕裂.
CompositionTarget和DistpatcherTimer之间似乎没有区别.我使用以下方法(在伪代码中):
Register Handler to Tick-Event of a DispatcherTimer
In each Tick:
Compute the elapsed time from the last frame in milliseconds
Object.X += movementSpeed * ellapsedMilliseconds
Run Code Online (Sandbox Code Playgroud)
这应该会导致运动平稳,对吧?但事实并非如此.这是一个例子(控件:WASD和鼠标):Silverlight游戏.虽然我所描述的效果在这个示例中并不太普遍,但我可以向您保证,即使在画布上移动单个矩形也会产生跳跃动画.
有人知道如何最小化这个.有没有其他方法可以使用Storyboards/DoubleAnimations来解决基于帧的动画问题?
编辑:这是一个快速而肮脏的方法,用最少的代码(控件:A和D)动画样本制作动画
XAML:
<Grid x:Name="LayoutRoot" Background="Black">
<Canvas Width="1000" Height="400" Background="Blue">
<Rectangle x:Name="rect" Width="48" Height="48"
Fill="White"
Canvas.Top="200"
Canvas.Left="0"/>
</Canvas>
</Grid>
Run Code Online (Sandbox Code Playgroud)
C#:
private bool isLeft = false;
private bool isRight = false;
private DispatcherTimer timer = new DispatcherTimer();
private double lastUpdate;
public Page()
{
InitializeComponent();
timer.Interval = TimeSpan.FromMilliseconds(1);
timer.Tick += OnTick; …Run Code Online (Sandbox Code Playgroud) 我正在构建一个控件,用户可以在其中"绘制"放置在内容上的可调整大小的矩形.要调整这些矩形的大小,我在它们上面使用一个包含4个Thumb的Adorner来改变矩形的大小.
问题是,此控件是"可缩放的",这意味着ScaleTransform将根据缩放系数应用于整个控件.Adorner中的Thumbs也受此ScaleTransform的影响.
但我需要它们来保持它们的大小,与缩放因子无关.我尝试将Adorners放在另一个非转换控件的Layer中,而不是矩形层,但这不起作用.我怎样才能做到这一点?
谢谢,Andrej
adorner ×2
wpf ×2
animation ×1
c# ×1
clipping ×1
dictionary ×1
performance ×1
silverlight ×1
transform ×1