【问题标题】:<Viewport3D>: Hidden element identification<Viewport3D>:隐藏元素识别
【发布时间】:2020-05-01 07:31:11
【问题描述】:

我有一个 XAML 布局:

<f:FlipPanel x:Name="flipper" Height="90" Width="90">
    <f:FlipPanel.Front>
        <Canvas x:Name="Empty_Frame" Visibility="Visible">
            <Path Stroke="#FFBCC2AB" StrokeThickness="2">
                <Path.Data>
                    <GeometryGroup FillRule="EvenOdd">

                    ... <!-- There are a lot of geometric elements -->

        </Canvas>
    </f:FlipPanel.Front>
    <f:FlipPanel.Back>

    ... <!-- There are a lot of geometric elements -->

    </f:FlipPanel.Back>
    </f:FlipPanel>

FlipPanel 是一个来自第三方库的复杂组件。在执行期间,我需要将&lt;Canvas&gt; 替换为另一组元素。 “搜索删除”代码不起作用:

var ecanvas = flipper.Children.OfType<Canvas>().FirstOrDefault(x => x.Name == "Empty_Frame");
flipper.Children.Remove(ecanvas);

原因在于隐藏的中间元素&lt;Viewport3D&gt;,它位于面板上。

问题:如何获得指向此隐藏元素的链接以使用它(添加和删除元素)?

【问题讨论】:

    标签: c# wpf parent children viewport3d


    【解决方案1】:

    我不知道 FlipPanel 是如何工作的,但实际上你并没有将 Canvas 添加到它的 Children 集合中,而是将它放到 FlipPanel 的 'Front' 属性中.如果要删除画布,请尝试以下操作:

    flipper.Front = null;
    

    为了在那里放置一个新元素:

    flipper.Front = myNewElement;
    

    【讨论】:

    • 第一个命令有效。在第二个我得到一个错误。 “在附加到新的父视觉之前,必须断开指定子与当前父视觉的连接。” myNewElement 已包含在网格中。 Сan它从父母那里被释放?还是应该在代码С#中重新创建?
    • 一个元素只能有 1 个父元素(只能是 1 个元素的子元素)。所以你应该首先从 Grid 的 Children 集合中删除它:myGrid.Children.Remove(myElement)
    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2018-05-31
    • 2010-10-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2015-03-20
    相关资源
    最近更新 更多