首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DrawingBrush从中心旋转RotateTransform

用DrawingBrush从中心旋转RotateTransform
EN

Stack Overflow用户
提问于 2017-05-30 08:14:18
回答 1查看 412关注 0票数 1

我有一个指南针的UserControl,我想旋转。我试着把它从中心旋转,谷歌找到了很多关于使用RenderTransformOrigin="0.5,0.5"来实现这一点的参考资料。但这并不是因为某种原因。它只是旋转UserControl的角作为原点。

如果我在CenterX="150"CenterY="150"中设置了UserControl,它就能工作。但是,我还必须将主窗口中的UserControl的高度和宽度设置为300。

在调用UserControl时,如何使UserControl从其中心点旋转,而不管设置的高度和宽度如何?我还希望在RenderTransformOrigin中设置UserControl,而不是在调用它时。

(简化) UserControl XAML:

代码语言:javascript
复制
<UserControl x:Class="Poseidon.Views.CompassUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Poseidon.Views"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">

    <Grid>
        <Grid.Resources>
            <DrawingBrush x:Key="Compass_ver1">
                <DrawingBrush.Drawing>
                    <DrawingGroup>
                        <DrawingGroup.Children>
                            <GeometryDrawing Brush="#FF000000" Geometry="M 375.286,151.366C 486.487,151.366 576.634,241.513 576.634,352.714C 576.634,463.915 486.487,554.061 375.286,554.061C 264.085,554.061 173.939,463.915 173.939,352.714C 173.939,241.513 264.085,151.366 375.286,151.366 Z "/>
                            <GeometryDrawing Geometry="M 375.286,151.366C 486.487,151.366 576.634,241.513 576.634,352.714C 576.634,463.915 486.487,554.061 375.286,554.061C 264.085,554.061 173.939,463.915 173.939,352.714C 173.939,241.513 264.085,151.366 375.286,151.366 Z ">
                                <GeometryDrawing.Pen>
                                    <Pen Thickness="0.755907" LineJoin="Round" Brush="#FF000000"/>
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                            <GeometryDrawing Brush="#FFFFFFFF" Geometry="M 382.484,188.872C 472.971,192.847 543.103,269.425 539.128,359.912C 535.153,450.399 458.575,520.531 368.088,516.556C 277.601,512.58 207.469,436.003 211.444,345.516C 215.42,255.029 291.997,184.897 382.484,188.872 Z "/>
                            <GeometryDrawing Geometry="M 382.484,188.872C 472.971,192.847 543.103,269.425 539.128,359.912C 535.153,450.399 458.575,520.531 368.088,516.556C 277.601,512.58 207.469,436.003 211.444,345.516C 215.42,255.029 291.997,184.897 382.484,188.872 Z ">
                                <GeometryDrawing.Pen>
                                    <Pen Thickness="0.755907" LineJoin="Round" Brush="#FF000000"/>
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                            <GeometryDrawing Brush="#FF000000" Geometry="M 375.286,227.352L 389.511,202.805L 403.736,178.258L 375.286,178.258L 346.836,178.258L 361.061,202.805L 375.286,227.352 Z "/>
                            <GeometryDrawing Geometry="M 375.286,227.352L 389.511,202.805L 403.736,178.258L 375.286,178.258L 346.836,178.258L 361.061,202.805L 375.286,227.352 Z ">
                                <GeometryDrawing.Pen>
                                    <Pen Thickness="0.755907" LineJoin="Round" Brush="#FF000000"/>
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                        </DrawingGroup.Children>
                    </DrawingGroup>
                </DrawingBrush.Drawing>
            </DrawingBrush>
        </Grid.Resources>
        <Rectangle Fill="{StaticResource Compass_ver1}">
            <Rectangle.RenderTransform>
                <RotateTransform Angle="{Binding FlightData.Value.Heading}" />
            </Rectangle.RenderTransform>
        </Rectangle>
    </Grid>
</UserControl>

主窗口XAML:

代码语言:javascript
复制
<local:CompassUserControl DataContext="{Binding Rov}" Height="100" Width="100" RenderTransformOrigin="0.5,0.5"/>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-30 10:02:32

RenderTransformOrigin属性获取或设置由RenderTransform属性声明的任何转换的中心点,相对于应用转换的元素的界限:https://msdn.microsoft.com/en-us/library/system.windows.uielement.rendertransformorigin(v=vs.110).aspx

因此-正如@Maxim所建议的-您应该在您的RenderTransformOrigin中设置Rectangle元素的UserControl属性

代码语言:javascript
复制
<Rectangle Fill="{StaticResource Compass_ver1}" RenderTransformOrigin="0.5, 0.5">
    <Rectangle.RenderTransform>
        <RotateTransform Angle="{Binding FlightData.Value.Heading}" />
    </Rectangle.RenderTransform>
</Rectangle>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44256955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档