【发布时间】:2014-11-16 19:44:29
【问题描述】:
我正在开发一个 WPF 项目,试图创建一个模拟时钟。我有一个时钟的图像(没有指针)并将其设置为背景。我也有两个时钟的图像,我想旋转它以保持一端固定(就像它发生在时钟中一样)。如何旋转图像,使其一端固定在 C#.NET (WPF) 中?我尝试的是以下代码:
namespace AnalogWatch
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
DispatcherTimer dispatcherTimer;
private int degrees = 0;
public MainWindow()
{
InitializeComponent();
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
degrees += 5;
if (degrees > 360)
{
degrees = 0;
}
RotateTransform transform = new RotateTransform(degrees,StickImg.Width/2,StickImg.Height/2);
//StickImg.RenderTransformOrigin = new System.Windows.Point(0, 0);
StickImg.RenderTransform = transform;
}
private void Window_ContentRendered_1(object sender, EventArgs e)
{
dispatcherTimer.Start();
}
}
}
它正在旋转图像,但不保持其一端固定。这里有什么问题?
XAML 是:
<Window x:Class="AnalogWatch.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" ContentRendered="Window_ContentRendered_1">
<Grid>
<Image x:Name="StickImg" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100" Margin="207,70,0,0" Source="stick.png"/>
</Grid>
</Window>
【问题讨论】:
-
你能描述一下应该固定的末端的运动吗?您确定图像的旋转中心与时钟指针的末端重合吗?
-
你的另一个问题发生了什么事,就像这个问题一样?你删了吗?如果你这样做了,它可能没问题,但是为了避免问题被禁止,编辑比删除更好(尽管你可能很难从反对票中恢复过来)。
-
另外,您的中心似乎是错误的。您可能希望中心位于 宽度/高度,而不是中点。
-
如果没有更完整的代码示例(XAML 在哪里?),很难知道什么是正确的,但正如 Bradley 所说,您需要将旋转的中心点设置为正确的位置。 “正确位置”取决于您首先如何定义时钟指针。另请注意,旋转原点是为了方便;您还可以平移对象,使旋转中心位于 (0,0),进行旋转,然后平移它,使旋转中心位于时钟的中心(即结合平移、旋转、然后再翻译)。
-
向问题添加了 XAML。