我有以下示例代码,每次按下按钮时缩放:
XAML:
<Window x:Class="WpfApplication12.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas x:Name="myCanvas">
<Canvas.LayoutTransform>
<ScaleTransform x:Name="myScaleTransform" />
</Canvas.LayoutTransform>
<Button Content="Button"
Name="myButton"
Canvas.Left="50"
Canvas.Top="50"
Click="myButton_Click" />
</Canvas>
</Window>
Run Code Online (Sandbox Code Playgroud)
*的.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void myButton_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("scale {0}, location: {1}",
myScaleTransform.ScaleX,
myCanvas.PointToScreen(GetMyByttonLocation()));
myScaleTransform.ScaleX =
myScaleTransform.ScaleY =
myScaleTransform.ScaleX + 1;
Console.WriteLine("scale {0}, location: {1}",
myScaleTransform.ScaleX,
myCanvas.PointToScreen(GetMyByttonLocation()));
}
private Point GetMyByttonLocation()
{
return new Point(
Canvas.GetLeft(myButton),
Canvas.GetTop(myButton));
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
scale 1, location: …Run Code Online (Sandbox Code Playgroud) 在我的申请中,我有一个ListBox项目.该应用程序是用WPF编写的.
如何自动滚动到最后添加的项目?我希望在ScrollViewer添加新项目时将其移动到列表的末尾.
有什么事ItemsChanged吗?(我不想使用这个SelectionChanged活动)
我想在WPF中有一个高效的日志查看器控件,它只是在添加消息时显示实时日志.连接来自日志系统的通知没有问题,但是我担心一旦日志数量变大,日志窗口就会随着每个追加的日志行进行爬行.
日志通知事件将只提供一个日志字符串(以及一些元数据),我想要附加到TextBox中的行或带有滚动条的类似行.假设有足够的内存,附加大量的行不应该是内存问题,但我不希望一旦添加行号10,000,系统就会变慢.
我假设一旦字符串进入MB大小和数千行,将TextBox绑定到简单的字符串依赖属性将变得相当慢.
如何在WPF中有效地编写这样的控件?
我正在编写一个需要类似日志视图的应用程序(类似于IM客户端在对话中显示消息的方式),每秒可能有很多更新.速度是一个问题; 由于大量传入事件导致应用程序锁定是一个可能的问题.我需要选择和基本的文本格式,所以手动渲染可能会变得非常复杂,我想尽可能避免它.我还想底部锚定滚动条,也就是说,如果它在底部,则在添加新项目时保持在底部.实现这个的好方法是什么?