ScatterView
의 MainWindow.xaml
에 태그가있을 때 표시되는 TagVisualization.xaml
이 표시됩니다. 그 안에서 TagVisualization
, 내가 라고 부르는 외부 클래스에 의해 채워지는 LibraryBar
을 가지고있는 PhotoGallery.xaml
을 가지고있다. DragDropScatterView
클래스를 구현하여 LibraryBar
에서 항목을 드래그하여 에 놓을 수 있습니다. 새로운 ScatterViewItem
이 생성되면 닫기 버튼이 있습니다. 클릭하면 해당 항목이 ScatterView
에서 삭제되고 LibraryBar
에서 다시 사용하도록 설정됩니다. 내가 문제가되는 것은 PhotoGallery.xaml
에 도착할 수 없기 때문에 항목을 다시 사용하는 것입니다. 동일한 LibraryBar에서 파생 된 ScatterViewItem을 터치 한 후 LibraryBar 항목을 다시 사용 가능하게 설정합니다.
_host.Tag
항상
null
때문에
private void SurfaceButton_TouchDown(object sender, TouchEventArgs e) {
ScatterViewItem _host = MyApplication.Helpers.VisualTree.FindVisualParent<ScatterViewItem>(this);
if (_host != null) {
DependencyObject parent = VisualTreeHelper.GetParent(this);
ScatterViewItem svi = null;
while (parent as DragDropScatterView == null)
{
if (parent is ScatterViewItem)
svi = parent as ScatterViewItem;
parent = VisualTreeHelper.GetParent(parent);
}
// Access directly to the LibraryBar
LibraryBar lb = _host.Tag as LibraryBar;
lb.SetIsItemDataEnabled(_host.Content, true);
((DragDropScatterView)parent).Items.Remove(this.DataContext);
}
하지만, 내 현재의 프로젝트에,이 작동하지 않습니다. I 즉
private void scatterCloseButton(object sender, TouchEventArgs e) {
ScatterViewItem _host = MyApplication.Model.VisualTree.FindVisualParent<ScatterViewItem>(this);
if (_host != null) {
DependencyObject parent = VisualTreeHelper.GetParent(this);
ScatterViewItem svi = null;
while (parent as DragDropScatterView == null) {
if (parent is ScatterViewItem)
svi = parent as ScatterViewItem;
parent = VisualTreeHelper.GetParent(parent);
}
// The data of the item
PhotoGalleryViewModel lb = _host.DataContext as PhotoGalleryViewModel;
if (lb != null) {
// The Tag Visualizer relative to that tag
TagVisualizer tagVisualizer = SurfaceFiturApp.Model.VisualTree.FindVisualParent<TagVisualizer>(this);
if (tagVisualizer != null) {
// The PhotoGallery object where the gallery is in
PhotoGallery photoGallery = SurfaceFiturApp.Model.VisualTree.FindVisualChild<PhotoGallery>(tagVisualizer);
if (photoGallery != null) {
// Enable the item in the library
photoGallery.setLibraryItemEnabled(lb);
}
}
}
// Remove the object from the ScatterView
((DragDropScatterView)parent).Items.Remove(this.DataContext);
}
}
하지만 (나는 TagVisualization
까지 모든 방법을 와서 LibraryBar
를 얻기 위해 모든 방법을 가고 있기 때문에 inneficiency이의 간격에서)이의 문제 : 나는이 함께 와서 관리 다른 LibraryBar's
을 구별 할 수 없습니다. 즉 표면에 두 개의 태그가있는 경우 그 중 하나만 항목을 다시 사용할 수있게되고 다른 태그는 아무 것도 안됩니다.
내 질문은 : 코드의 첫 번째 chunck 감안할 때, 내가 어떻게 작동합니까? 거기에서 어떻게하면 LibraryBar
에 도달 할 수 있습니까? 즉, ScatterViewItem
(PhotoGalleryViewModel
)에서 TagVisualization
안에있는 LibraryBar
으로 이동하십시오. 즉, 차례대로 의 MainWindow
안에 있습니까?