【问题标题】:wpf how to get canvas from itemspaneltemplate in code behind?wpf如何从后面的代码中的itemspaneltemplate获取画布?
【发布时间】:2014-02-25 00:31:57
【问题描述】:

所以如果我有一个项目控件,并且想在后面的代码中获取画布,我该怎么办?我可以获得 itemscontrol,但是我该怎么做才能检索画布?我试过了

Canvas c1 = ic.FindName("MarkerCanvas") as Canvas;

其中 ic 是项目控件。我还尝试了 itemscontrol 的各种模板下的 findname 功能,但收效甚微。我该怎么办?

     <ItemsControl 
          >
          <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
              <Canvas 
                x:Name="MarkerCanvas"
                SnapsToDevicePixels="false"
                />
            </ItemsPanelTemplate>
          </ItemsControl.ItemsPanel>
     </ItemsControl 
          >

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    我发现了这个并测试它是否有效:

    How can I find WPF controls by name or type?

    只需将调用更改为

    Canvas foundCanvas =UIHelper.FindChild<Canvas>(Application.Current.MainWindow, "MarkerCanvas");
    

    【讨论】:

    • 最初并没有打算使用它,因为我认为模板本身上的 findname 函数应该可以工作,但是如果尚未应用模板,它似乎不起作用,所以它是更容易使用这个功能。
    【解决方案2】:

    如果你有某个 Canvas 的子对象,比如 myControl,那么这应该可以:

    var dObj = myControl as DependencyObject;
    while (!(dObj is Canvas && (dObj as Canvas).Name == "MarkerCanvas")) dObj == VisualTreeHelper.GetParent(dObj);
    

    【讨论】:

      猜你喜欢
      • 2017-11-17
      • 1970-01-01
      • 2010-10-29
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多