Wpf 在一切之上呈现usercontrol

Wpf 在一切之上呈现usercontrol,wpf,animation,user-controls,render,z-index,Wpf,Animation,User Controls,Render,Z Index,我有一个usercontrol,我想通过rendertransform设置它的动画。(旋转、平移、缩放) 它工作得很好,但是控件位于具有其他控件的层下面的层上,这些控件是由具有itemsources的itemcontrols创建的。 usercontrol不应该知道它的父对象,所以我想我正在寻找类似于通用渲染zindex的东西 我的想法是使用一个弹出窗口,但它有性能缺点和鼠标事件的复杂性。 (这是用bitmapcachebrush实现的) 我想我无法从itemscontrol的itemssour

我有一个usercontrol,我想通过rendertransform设置它的动画。(旋转、平移、缩放) 它工作得很好,但是控件位于具有其他控件的层下面的层上,这些控件是由具有itemsources的itemcontrols创建的。 usercontrol不应该知道它的父对象,所以我想我正在寻找类似于通用渲染zindex的东西

我的想法是使用一个弹出窗口,但它有性能缺点和鼠标事件的复杂性。 (这是用bitmapcachebrush实现的) 我想我无法从itemscontrol的itemssource中取出项目并将其放在前一层

我要找的是装饰品吗?而且它不必/不应该对鼠标事件做出响应。(处理鼠标进入和离开的画布父对象是)
还有其他可能性吗?

1.自定义控件xaml剪切

2.自定义控件鼠标事件

3.ui元素装饰器类

 <Grid x:Name="adholder" Width="{Binding ElementName=thiscontrol, Path=ActualWidth}">
                 <!-- Add adorning content here -->
            <Grid  x:Name="gridAnimation" IsHitTestVisible="False"
                   Height="{Binding ElementName=thiscontrol, Path=ActualHeight}"
                   Width="{Binding ElementName=thiscontrol, Path=ActualWidth}">
            <Grid.CacheMode>
                <BitmapCache x:Name="bmpcache" EnableClearType="True" 
                                     RenderAtScale="1" 
                                     SnapsToDevicePixels="False" 
/>
            </Grid.CacheMode>




    private void thiscontrol_MouseEnter(object sender, MouseEventArgs e)
    {
        if (StoryboardEnter != null)
        {
            layer = AdornerLayer.GetAdornerLayer(gridAnimation);

            adholder.Children.Clear();
            adc = new AdornerContentPresenter(adholder);
             
       
            adc.Content = gridAnimation; 

            layer.Add(adc);

            StoryboardEnter.RunAnim(gridAnimation, AnimationDirection.To, AnimationReset.Reset);
        }
    }

//not my code
 public class AdornerContentPresenter : Adorner
{
    private VisualCollection _Visuals;
    private ContentPresenter _ContentPresenter;

    public AdornerContentPresenter(UIElement adornedElement)
      : base(adornedElement)
    {
        _Visuals = new VisualCollection(this);
        _ContentPresenter = new ContentPresenter();
        _Visuals.Add(_ContentPresenter);
    }

    public AdornerContentPresenter(UIElement adornedElement, Visual content)
      : this(adornedElement)
    { Content = content; }

    protected override Size MeasureOverride(Size constraint)
    {
        _ContentPresenter.Measure(constraint);
        return _ContentPresenter.DesiredSize;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        _ContentPresenter.Arrange(new Rect(0, 0,
             finalSize.Width, finalSize.Height));
        return _ContentPresenter.RenderSize;
    }

    protected override Visual GetVisualChild(int index)
    { return _Visuals[index]; }

    protected override int VisualChildrenCount
    { get { return _Visuals.Count; } }

    public object Content
    {
        get { return _ContentPresenter.Content; }
        set { _ContentPresenter.Content = value; }
    }
}

私有void thiscontrol\u MouseEnter(对象发送方,MouseEventArgs e)
{
if(故事板输入!=null)
{
layer=AdornerLayer.GetAdornerLayer(网格动画);
adholder.Children.Clear();
adc=新的AdornerContentPresenter(adholder);
adc.Content=gridAnimation;
层。添加(adc);
StoryboardEnter.RunAnim(gridAnimation,AnimationDirection.To,AnimationReset.Reset);
}
}
//不是我的代码
公共类AdornerContentPresenter:Adorner
{
私人视觉收藏(VisualCollection);;
私有ContentPresenter\u ContentPresenter;
公共AdornerContentPresenter(UIElement-adornedElement)
:基础(装饰元素)
{
_视觉=新的视觉集合(本);
_ContentPresenter=新的ContentPresenter();
_添加(_ContentPresenter);
}
公共AdornerContentPresenter(UIElement-adornedElement,可视内容)
:此(装饰元素)
{Content=Content;}
受保护的覆盖尺寸测量覆盖(尺寸约束)
{
_ContentPresenter.Measure(约束);
return\u ContentPresenter.DesiredSize;
}
受保护的替代尺寸排列替代(尺寸最终化)
{
_ContentPresenter.Arrange(新矩形(0,0,0,
最终尺寸(宽度、最终尺寸(高度));
返回_ContentPresenter.RenderSize;
}
受保护的重写Visual GetVisualChild(int索引)
{return _Visuals[index];}
受保护的重写int VisualChildrenCount
{get{return\u Visuals.Count;}}
公共对象内容
{
获取{return\u ContentPresenter.Content;}
设置{u ContentPresenter.Content=value;}
}
}