我正在重写这个问题,试图让人们更清楚地知道我做了什么,试图做等等。
我参与了一个项目,我试图进行一些视觉显示。一个显示器是一个表盘,我几乎从这个链接获得了整个代码。
我现在正试图做一个垂直测量,有点像下面。
现在我修改了拨号代码,因此背景比例等都可以。
我所拥有的问题是移动指标。
拨号代码定义了xaml中的拨号,如下所示。
<Path x:Name="Pointer" Stroke="#FFE91C1C" StrokeThickness="2"
Width="{TemplateBinding PointerLength}"
Height="{TemplateBinding PointerThickness}"
HorizontalAlignment="Center"
Data="M1,1 L1,10 L156,6 z" Stretch="Fill"
RenderTransformOrigin="0,0.5"
RenderTransform="{Binding RelativeSource=
{RelativeSource TemplatedParent}, Path=PointerLength,
Converter={StaticResource pointerCenterConverter}}">
并在.cs文件中控制其位置,如下所示。
TransformGroup tg = pointer.RenderTransform as TransformGroup;
RotateTransform rt = tg.Children[0] as RotateTransform;
rt.Angle = angleValue;
现在因为我只是垂直向上和向下移动指示器,我相信我需要一个TranslateTransform。在Sheridan的帮助下。我已将我的xaml更改为以下内容。
<Path x:Name="Pointer" Stroke="#FFE91C1C" StrokeThickness="2"
VerticalAlignment="Bottom"
Data="M 0,0 L 16,-5 L16,5 L0,0 z">
<Path.RenderTransform>
<TransformGroup>
<TranslateTransform/>
</TransformGroup>
</Path.RenderTransform>
现在我正在努力解决我的.cs需要编辑的问题。目前正在玩
TransformGroup tg = pointer.RenderTransform as TransformGroup;
TranslateTransform rt = tg.Children[0] as TranslateTransform;
rt.Y = -10;
然而抛出错误“无法在对象'System.Windows.Media.TranslateTransform'上设置属性,因为它处于只读状态。”
谢丽丹再次建议我尝试分配一个新对象并替换旧对象。但我似乎试图抛出错误或没有效果。答案 0 :(得分:0)
要转换UIElement
,首先需要在其上应用转换元素:
<Path ... >
<Path.RenderTransform>
<TranslateTransform />
</Path.RenderTransform>
</Path>
如果您使用TranslateTransform
作为RenderTransform
属性值,则无法将其转换为RotateTransform
。您可以在MSDN上的UIElement.RenderTransform
Property页面上找到更多信息。
TransformGroup tg = pointer.RenderTransform as TransformGroup;
// tg == null
同样,如果您尝试将此属性值转换为TransformGroup
而未设置该值,则将获得null
值:
<Path ... >
<Path.RenderTransform>
<TransformGroup>
<ScaleTransform />
<RotateTransform />
</TransformGroup>
</Path.RenderTransform>
</Path>
您可以在MSDN上的TransformGroup
Class页面上找到更多信息。
...
TransformGroup tg = pointer.RenderTransform as TransformGroup;
// tg is a TransformGroup
答案 1 :(得分:0)
请找到动态变换的简单工作代码。我希望它能帮助你
WPF
<Window x:Class="WPFAnimationSample2.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" Loaded="Window_Loaded">
<Grid>
<Ellipse x:Name="animateEllipse" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="61" Margin="99,78,0,0" Stroke="Black" VerticalAlignment="Top" Width="81" RenderTransformOrigin="0.5,0.5" >
<Ellipse.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform X="1" Y="1"/>
</TransformGroup>
</Ellipse.RenderTransform>
</Ellipse>
<Button Content="Button" HorizontalAlignment="Left" Margin="180,256,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
C#
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
void checkAnimation()
{
TransformGroup tg = animateEllipse.RenderTransform as TransformGroup;
TranslateTransform rt = tg.Children[3] as TranslateTransform;
rt.X = rt.X+100;
rt.Y = 100;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
checkAnimation();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
checkAnimation();
}
}