代码之家  ›  专栏  ›  技术社区  ›  anon

分散视图和ViewBox未按预期工作

  •  0
  • anon  · 技术社区  · 14 年前

    我定义了以下布局:

    <Grid Name="RootGrid" Background="{StaticResource WindowBackground}" >
            <s:ScatterView Name="RootScatter">
                <Viewbox>
                    <s:LibraryContainer Name="RootContainer" Grid.Row="0" ViewingMode="Bar">
                        <s:LibraryContainer.BarView>
                            <s:BarView Rows="2" NormalizedTransitionSize="2.5,0.8" ItemTemplate="{StaticResource ContainerItemTemplate}">
                            </s:BarView>
                        </s:LibraryContainer.BarView>
                        <s:LibraryContainer.StackView>
                            <s:StackView NormalizedTransitionSize="1,1" ItemTemplate="{StaticResource ContainerItemTemplate}">
                            </s:StackView>
                        </s:LibraryContainer.StackView>
                    </s:LibraryContainer>
                </Viewbox>
            </s:ScatterView>
            <s:ScatterView Name="ClassScatter"></s:ScatterView>
        </Grid>
    </s:SurfaceWindow>
    

    现在我将动态项目添加到第二个散射视图:

    public void expand(SurfaceWindow1 surfaceWindow)
            {
                Logging.Logger.getInstance().log("Expand class " + name);
    
                if (!isExpanded())
                {
                    Viewbox vb = new Viewbox();
                    SurfaceTextBox txt = new SurfaceTextBox();
                    txt.Text = this.name + "\nLOC: " + this.getLoc() + "\nFanIn: " + this.getFanIn() + "\nFanOut: " + this.getFanOut() + "\nComplexity: " + this.getComplexity();
                    txt.IsReadOnly = true;
    
                    vb.Child = txt;
                    surfaceWindow.ClassScatter.Items.Add(vb);
                    this.setExpanded(true);
                }
            }
    

    这很好,但不幸的是,我无法更改创建的对象的大小、移动或旋转。有什么提示吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   robertos    14 年前

    问题是,您的文本框捕获触摸联系人,而散射视图无法捕获它们,无法拖动/缩放/旋转文本框。有两种方法可以解决您的问题:

    1. 如果希望用户可以移动但不可编辑该项,请使用常规文本块替换SurfaceTextBox。
    2. 如果仍希望文本可编辑,请在文本框中添加一些边距,以在元素周围创建一个“拖动区域”。例如。: txt.Margin = new Thickness(20);