WPF如何在代码后台从ItemsPanelTemplate中获取Canvas?

4
如果我有一个ItemsControl并想在代码后台获取Canvas,该怎么办?我可以获取ItemsControl,但是我该怎么做才能检索Canvas?我已经尝试过。
Canvas c1 = ic.FindName("MarkerCanvas") as Canvas;

ic是ItemsControl。我还尝试在ItemsControl的不同模板下使用FindName函数,但效果很小。我应该怎么做?

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

2

本来没有打算使用这个,因为我认为模板本身的findname函数应该可以工作,但是如果模板还没有被应用,它似乎不起作用,所以使用这个函数更容易。 - James Joshua Street

1
如果您有一个是Canvas的子级的内容,比如myControl,那么这应该可以工作:
var dObj = myControl as DependencyObject;
while (!(dObj is Canvas && (dObj as Canvas).Name == "MarkerCanvas")) dObj == VisualTreeHelper.GetParent(dObj);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接