タグが配置されたときに表示されるMainWindow.xaml
aを持つScatterView
を持っています。TagVisualization.xaml
その中にTagVisualization
、という外部クラスがPhotoGallery.xaml
存在する、があります。クラスを実装したので、からアイテムをドラッグして、にドロップできます。新しいものが作成されると、閉じるボタンがあります。クリックすると、アイテムがから削除され、で再度有効になるはずです。私の問題は、アイテムを再度有効にすることです。これは、に到達できないように見えるためです。LibraryBar
PhotoGalleryViewModel.cs
DragDropScatterView
LibraryBar
ScatterView
ScatterViewItem
ScatterView
LibraryBar
PhotoGallery.xaml
しばらく前に私は似たようなものを持っていて、誰かが私に次の解決策をくれました:
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);
}
ただし、現在のプロジェクトでは、_host.Tag
が常にであるため、これは機能しませんnull
。私はなんとかこれを思いついた:
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
)、私が異なるものを区別できないことですLibraryBar's
。つまり、表面に2つのタグがある場合のみです。それらの1つはアイテムを再度有効にし、他は何もしません。
だから私の質問は:コードの最初のチャンクを考えると、どうすればそれを私のために機能させることができますか?どうすれば、そこから自分のに到達できますかLibraryBar
。つまり、ScatterViewItem
(PhotoGalleryViewModel
)からLibraryBar
aの中にあるものまで、つまり、の中TagVisualization
にMainWindow
あるものまで、どのように到達できScatterView
ますか?