标签: rendertransform

让图像ManipulationMode捕获指针

在我的应用程序中,用户可以选择一个Image并将其拖到a上Grid,以便进行播放.我通过处理PointerEntered事件来做到这一点Grid.在这里,我检测用户是否选择了图像以及用户是否按住鼠标按钮.

现在,我要放置Image在网格上,并通过对(仍然按下)指向我的Image,所以Image使用它自己的ManipulationStarted,ManipulationDeltaManipulationCompleted事件.这应该让用户将图像从图像列表中平滑移动到Grid,而不必释放并单击元素.

我已经尝试从senderin中释放指针PointerEntered并使用它捕获它CapturePointer,但这似乎不起作用,即使CapturePointer返回true.

这是我用于PointerEntered事件的代码:

private void DrawingArea_OnPointerEntered(object sender, PointerRoutedEventArgs e)
{
    // If we enter the grid while dragging and we have an image that was dragged
    if (e.Pointer.IsInContact && CurrentDraggedImage != null)
    {
        DrawingArea.Children.Add(CurrentDraggedImage);

        // Move it to the location we're currently at
        var transform …
Run Code Online (Sandbox Code Playgroud)

c# rendertransform win-universal-app

15
推荐指数
1
解决办法
801
查看次数

在代码问题中应用动画ScaleTransform

我试图找出为什么下面的代码似乎不起作用.它没有给出错误 - 它根本不会缩放.如果我将其更改为我的第二个代码示例,它实际上似乎有效.有人有任何想法吗?

谢谢

public static void StartMouseEnterAnimation(Button button)
    {
        Storyboard storyboard = new Storyboard();

        ScaleTransform scale = new ScaleTransform(1.0, 1.0, 1, 1);
        button.RenderTransformOrigin = new Point(0.5, 0.5);
        button.RenderTransform = scale;

        DoubleAnimation growAnimation = new DoubleAnimation();
        growAnimation.Duration = TimeSpan.FromMilliseconds(300);
        growAnimation.From = 1;
        growAnimation.To = 1.8;
        storyboard.Children.Add(growAnimation);

        Storyboard.SetTargetProperty(growAnimation, new PropertyPath(ScaleTransform.ScaleXProperty));
        Storyboard.SetTarget(growAnimation, scale);

        storyboard.Begin();
    }
Run Code Online (Sandbox Code Playgroud)

---下面的DOES工作,但我必须创建一个TransformGroup并通过一个更复杂的PropertyChain引用它...

public static void StartMouseEnterAnimation(Button button)
    {    
        Storyboard storyboard = new Storyboard();            
        ScaleTransform scale = new ScaleTransform(1.0, 1.0, 1, 1);
        button.RenderTransformOrigin = new Point(0.5, 0.5);
        TransformGroup myTransGroup …
Run Code Online (Sandbox Code Playgroud)

c# wpf animation rendertransform

8
推荐指数
1
解决办法
2万
查看次数

应用LayoutTransform与RenderTransform的性能影响?

我已经处理过LayoutTransform和RenderTransform,我知道每个都适合我在以前的项目中找到的特定场景.

但是,从性能角度和使用WPF分析工具时,对于一个实例,哪一个对UI性能的影响较小?

wpf performance layouttransform rendertransform

8
推荐指数
2
解决办法
3635
查看次数

使用RenderTransform时如何防止文本像素化?

当我使用RenderTransform属性并向上扩展RichTextBox时,我获得了像素化的放大文本(方形文本边缘).

我怎么能阻止这个? 在此输入图像描述

编辑:

我有TextOptions.TextFormattingMode ="显示" - 当我删除此选项时一切都很好!

c# wpf graphics richtextbox rendertransform

6
推荐指数
1
解决办法
978
查看次数

修改ItemsControl中项目的ZIndex

这是我的ItemsControl的代码,当鼠标移过时放大项目.
我没有设法增加当前缩放项目的ZIndex以将其放在其他项目上.

<ItemsControl ItemsSource="{Binding Path=Value}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Name}"
                       RenderTransformOrigin="0.5 0.5">
                <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}">
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="RenderTransform">
                                    <Setter.Value>
                                        <ScaleTransform ScaleX="1.5"
                                                        ScaleY="1.5" />
                                    </Setter.Value>
                                </Setter>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
Run Code Online (Sandbox Code Playgroud)

我试图在触发器中直接更改ZIndex,但它不起作用.
我似乎需要更改ContentPresenter中的ZIndex,它是VisualTree中TextBlock的Parent,而不是直接在TextBlock中.

<Setter Property="Panel.ZIndex" Value="99" />
Run Code Online (Sandbox Code Playgroud)

所以我尝试在ContentPresenter中更改ZIndex,但它仍然不起作用

<ItemsControl.ItemContainerStyle>
    <Style TargetType="{x:Type ContentPresenter}">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Panel.ZIndex" Value="99" />
            </Trigger>
        </Style.Triggers>
    </Style>
</ItemsControl.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

有谁知道它是如何工作的?

wpf z-index itemscontrol rendertransform

6
推荐指数
1
解决办法
6804
查看次数

WPF:获取子UIElement在其父级中的位置.忽略RenderTransform(如果有)

假设我有这个XAML代码:

<DockPanel Name="pan">
    <Label Content="AAA" Name="lab1" />
    <Label Content="BBB" Name="lab2" />
    <Label Content="CCC" Name="lab3" />
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

我在我后面的代码我想找出是什么的坐标lab2范围内pan.Hovewer我想忽略任何现有的RenderTransform lab2.因此,解决方案必须返回上述代码的相同坐标,并遵循:

<DockPanel>
    <Label Content="AAA" />
    <Label Content="BBB" >
        <Label.RenderTransform>
            <TranslateTransform Y="20"/>
        </Label.RenderTransform>
    </Label>
    <Label Content="CCC" />
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

换句话说我想这是在设定的位置ArrangeOverride的方法pan调用时Arrangebut2.我称之为"合乎逻辑的位置".通过调用以下方法可以获得"视觉位置":

private Point visualPoss() {
    Point lab2Vis = lab2.PointToScreen(new Point(0, 0));
    Point panVis = pan.PointToScreen(new Point(0, 0));
    return new Point(lab2Vis.X - panVis.X, lab2Vis.Y - panVis.Y);
} 
Run Code Online (Sandbox Code Playgroud)

但这不是我的问题的解决方案,因为visualPoss()对于上面的两个XAML代码示例,它的返回值不相等.

如果不清楚,请留下评论.

谢谢

.net wpf controls panel rendertransform

4
推荐指数
1
解决办法
7147
查看次数

默认的RenderTransform转换器语法

我有一个像这样应用RenderTransform的画布:

<Canvas RenderTransform="0.1,0,0,-0.1,0,913">
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这些价值观是什么意思?我似乎无法找到用于解析这些值的转换器.

wpf xaml converter rendertransform

4
推荐指数
1
解决办法
946
查看次数

更改 UIElement 的角度

我有这个代码:

RotateTransform transform = myImage.RenderTransform as RotateTransform;
transform.Angle = 25.0;
myImage.RenderTransform = transform;
Run Code Online (Sandbox Code Playgroud)

它设置了Angle我的Image元素。它有效,但它并没有像我预期的那样移动太多。

我只是想知道是否Angle是根据图像的右上角设置的?那么,它是否将图像从图像右侧旋转 25 度?

wpf xaml rendertransform win-universal-app

4
推荐指数
1
解决办法
1849
查看次数

WPF 转换——旋转和切换宽度/高度?

基本上,我有一个FooControl(我并没有设置高度/宽度明确)加入Grid

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <FooControl x:Name="HWFoo" Content="HelloWorld" Grid.Row="0">
        <FooControl.RenderTransform>
            <TransformGroup>
                <RotateTransform Angle="270" />
                <TranslateTransform Y="{Binding ActualWidth, ElementName=HWFoo}" />
            </TransformGroup>
        </FooControl.RenderTransform>
    </FooControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)

但是,现在的问题是 FooControl 填满了整行,当它被转换时,它看起来很奇怪(因为它的高度/宽度)。


FooControl 是一个自定义控件。那么我应该对ArrangeOverride 或MeasureOverride 做些什么吗?或者我做错了什么可以在 XAML 中修复。

wpf rotatetransform custom-controls rendertransform

2
推荐指数
1
解决办法
3470
查看次数

图像上的ScaleTransform会留下空白

我正在创建一个包含单个图像的对话框,并覆盖多边形.问题是图像的比例与多边形的比例不同,所以我想缩小图像以匹配多边形的比例.但是当我使用RenderTransform/ScaleTransform标签时,图像的大小会缩小,在对话框的右下角留下空白.是的,叠加现在可以正常工作,但我想让它填满可用空间来填充窗口.

<Window x:Class="vw.CollImage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Collection Image" Height="700" Width="700"
    WindowStartupLocation="CenterOwner" Grid.IsSharedSizeScope="False"
    Icon="Resources\ty.ico">

    <Viewbox MinWidth="70" MinHeight="70">
        <Grid>
            <Image Name="imgColl" HorizontalAlignment="Left" VerticalAlignment="Top" Source="{Binding ImageData}">
                <Image.RenderTransform>
                    <ScaleTransform ScaleX="0.75" ScaleY="0.75"/>
                </Image.RenderTransform>
            </Image>
            <Polyline Stroke="OrangeRed" StrokeThickness="6" Points="{Binding Coordinates}"/>
        </Grid>
    </Viewbox>
</Window>
Run Code Online (Sandbox Code Playgroud)

wpf viewbox scaletransform rendertransform

1
推荐指数
1
解决办法
845
查看次数

如何使用 MatrixTransform 将缩放限制为 500%?

我有一个Image如下所示。使用MatrixTransformI 可以轻松放大和缩小。如何检测缩放是否太小/太大?例如,我想将缩放限制为 10-200%。

<ScrollViewer x:Name="scrollViewer" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto">
   <Border x:Name="border" ClipToBounds="True" Width="Auto" Height="Auto">
     <Image x:Name="image" Source="test.png"/>
   </Border>
 </ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

实际改造:

Point p = e.MouseDevice.GetPosition(image);

Matrix m = image.RenderTransform.Value;
if (e.Delta > 0)
    m.ScaleAtPrepend(1.1, 1.1, p.X, p.Y);
else
    m.ScaleAtPrepend(1.0 / 1.1, 1.0 / 1.1, p.X, p.Y);

// How do I know if the zoom level is lower than 10% or higher than 200%?
image.RenderTransform = new MatrixTransform(m);
Run Code Online (Sandbox Code Playgroud)

wpf zooming rendertransform

1
推荐指数
1
解决办法
2312
查看次数